搜尋此網誌

2013年11月21日 星期四

在Linux中,如何使用程式直接讀取記憶體中的資料。

這兩個鏈結中,提供Sample Code,關於如何存取記憶體,在Linux中。


將Physical Address轉成Virtual Address。
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
歸還Virtual Address。
int munmap(void *addr, size_t length);

devmem.c [Link1]

devmem2 [Link2]


[“Bus error” system error] 匯流排錯誤--系統錯誤

Bus Error通常是由應用程式試圖去存取記憶體空間,硬體不能實際定址。這原因可能是一個沒有對齊的存取,像是存取不存在的地址,或者是沒有足夠的權限來存取或更改記憶體。這很難說這到底是什麼問題你所遇到,不知道你改了什麼程式碼;甚至超過 - 使用不同的編譯器或編譯器的設置也可能會導致此行為。
from: http://stackoverflow.com/questions/5870353/bus-error-system-error

Unhandled fault: External abort on non-linefetch (0x18) at 0xb6f4d000
Bus error

可能的錯誤原因:

此錯誤的產生,當程式試圖去讀取RX FIFO Port時,但它的FIFO沒有任何資料。當/dev/mem讀取有正確回應時,表示那邊有東西被讀取到。
http://forums.xilinx.com/t5/Embedded-Linux/ZC702-Devmem-failure-accessing-AXI-port/td-p/284746

2013年11月20日 星期三

在Mac Pro上,如何安裝rEFIt Shell環境?

===================================================================
How to Install rEFIt Shell Environment in Mac?
===================================================================
rEFIt是一個開機選單,還有它也式EFI-based機器的維護工具,像是Intel Mac Pro 。它提供了一個簡單的方法來進入和探索的EFI預先開機環境。

1. 在Mac OSX中,連上此連結http://refit.sourceforge.net/ ,使用你所熟悉的瀏覽器。

2. 下載rEFIt 0.13(版本可能會有所不同) (Mac的磁碟影像). (如果你遭遇任何問題,請參閱線上文件檔案。) 在下載成功後,系統將自動安裝的磁碟影像。

3. 在Finder中,雙擊“rEFIt.mpkg”來安裝rEFIt。

4. 關閉系統電源(建議),等過幾秒後再開啟系統電源,此時按住[option] 按鍵直到rEFIt圖示出現。

5. 點擊rEFIt圖示與使用鍵盤去選擇[Start EFI Shell]。現在你已經在rEFIt環境中。

6. 輸入"drivers"指令來測試,此指令會列出所有EFI當前的驅動程式。試試看吧!!

2013年11月19日 星期二

在Linux上,如何搜尋PCI裝置?

lspci -mk

or

lspci -x

-m: Dump PCI device data in a backward-compatible machine readable form. See below for details
-k: Show kernel drivers handling each device and also kernel modules capable of handling it. Turned on by default when -v is given in the normal mode of output. (Currently works only on Linux with kernel 2.6 or newer.)
-x: Show hexadecimal dump of the standard part of the configuration space (the first 64 bytes or 128 bytes for CardBus bridges).

From: http://linux.die.net/man/8/lspci

在Ubuntu Linux裡,如何使用Cross Compiler?

1. 首先取得[linux-3.0.y.tgz] kernel source與[linux-nptl.tgz] tool chain。
2. 建立一個目錄,並解開這兩個檔案。
$ cd arm_tool/
arm_tool$ tar zxf linux-3.0.y.tgz
arm_tool$ tar zxf linux-nptl.tgz

切換路徑。
arm_tool$ cd linux-nptl/
rm_tool/linux-nptl$ cd arm-t34-linux/
arm_tool/linux-nptl/arm-t34-linux$ cd bin

查看檔案名稱。
arm_tool/linux-nptl/arm-t34-linux/bin$ ls
arm-t34-linux-uclibcgnueabi-addr2line
arm-t34-linux-uclibcgnueabi-ar
arm-t34-linux-uclibcgnueabi-as
arm-t34-linux-uclibcgnueabi-c++
arm-t34-linux-uclibcgnueabi-c++filt
arm-t34-linux-uclibcgnueabi-cpp
arm-t34-linux-uclibcgnueabi-g++
arm-t34-linux-uclibcgnueabi-gcc
arm-t34-linux-uclibcgnueabi-gcc-4.4.1
arm-t34-linux-uclibcgnueabi-gccbug
arm-t34-linux-uclibcgnueabi-gcov
arm-t34-linux-uclibcgnueabi-gprof
arm-t34-linux-uclibcgnueabi-ld
arm-t34-linux-uclibcgnueabi-nm
arm-t34-linux-uclibcgnueabi-objcopy
arm-t34-linux-uclibcgnueabi-objdump
arm-t34-linux-uclibcgnueabi-ranlib
arm-t34-linux-uclibcgnueabi-readelf
arm-t34-linux-uclibcgnueabi-size
arm-t34-linux-uclibcgnueabi-strings
arm-t34-linux-uclibcgnueabi-strip

加入目前位置到路徑中,並顯示。
arm_tool/linux-nptl/arm-t34-linux/bin$ export PATH=$PATH:`pwd`;echo $PATH
確定你打的是[`]個符號(跟~符號同一個按鍵),不是[']單引號。

arm_tool/linux-nptl/arm-t34-linux/bin$ cd ../../..

查看Makefile裡的Cross Compiler檔案路徑參數
arm_tool$ vi Makefile
...
CC        =  $(CROSS)gcc
CXX       =  $(CROSS)g++
LD        =  $(CROSS)ld
AR        =  $(CROSS)ar
...

設定Cross Compiler的檔案與路徑。
arm_tool$ export CROSS=arm-t34-linux-uclibcgnueabi-

測試編譯你的程式。
arm_tool/test$ make clean
arm_tool/test$ make all
or
arm_tool/test$ make

2013年11月11日 星期一

在Ubuntu Linux上,連接Windows的Share Folder

選擇"Connect to Server"選項。

在服務項目中選擇"Windows share"。


Server中填入[路徑資料、IP位址或網址]。
Folder中填入路徑中的[目錄名稱]。
Username中填入[使用者名稱]。
Add bookmark加入一個書籤,Bookmark name中填入書籤名稱。


輸入您的密碼。


現在您已經連上那服務平台的目錄。


P.S. In Search Bar of a Browser enter an instruction smb://
smb://10.20.158.66 


How to release utilities in Linux?

1. Remove -static at CFLAGS in Makefile.
2. run \>strip test
    delete symbol file and debugging messages.

How to remove this error("cannot find -lc") in suse linux?

gcc -static -Wall -Wstrict-prototypes -I. -g -DPRINT_OP -g -D__LINUX__   -o test main.o funs.o mmio.o pci.o
/usr/lib/gcc/i586-suse-linux/4.7/../../../../i586-suse-linux/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
make: *** [mvf] Error 1


open Makefile by edit, and then remove

from:
#CFLAGS       := -static -Wall -Wstrict-prototypes $(INCLUDEDIR)

to:
#CFLAGS       := -Wall -Wstrict-prototypes $(INCLUDEDIR)

-static
On systems that support dynamic linking, this prevents linking with the shared libraries. On other systems, this option has no effect. 

2013年11月6日 星期三

Watcom C makefile example

###########################################################################
#makefile_test
###########################################################################
PROJECTNAME = test_project
OUTPUTNAME = run

#which memory model and processor to use by default
#PROCESSOR =     # for the 16-bit compilers
#PROCESSOR = 386 # for the 32-bit compilers
DEBUG = true
REPORT = true

# name the compiler
CC = wcc$(PROCESSOR)
FC = wfc$(PROCESSOR)
ASM = wasm

!ifeq PROCESSOR 386
MODEL = f       # flat
OS = dos4g
!else
MODEL = h       # large
OS = dos
!endif

CFLAGS = -m$(MODEL) -zq -3
CFLAGS+= -d_DOS_
#CFLAGS+= -wcd=135
#CFLAGS+= -wcd=135 -fpc
CFLAGS+= -fp3 #hardware float
#CFLAGS+= -zdp

LISTOPT = echo $^&
FFLAGS = -m$(MODEL) -noterm -quiet
AFLAGS =
LNKOPT = option quiet option stack=8192

# options to use
!ifeq DEBUG true
CFLAGS+= -od -d2 -db+
#CFLAGS+= -v
CFLAGS+= -wx
LNKOPT+= debug all
LNKOPT+= option map
#else
CFLAGS+= -s
!endif

!ifeq REPORT true
LISTOPT = wdis $^& -s -l=$^&.lst# -a
#LISTOPT+= -s=$^&.c
!endif

!ifeq OS dos
CFLAGS+= -bt=dos
!endif

.EXTENSIONS:
.EXTENSIONS: .exe .rex .lib .obj .wbj .asm .c .for

.BEFORE
        @set INCLUDE=.;$(%watcom)\h;$(%watcom)\h\win
        @set LIB=.;$(%watcom)\lib286;$(%watcom)\lib286\dos
        @set FINCLUDE=$(%watcom)\src\fortran;$(%watcom)\src\fortran\dos
        @set DOS4G=QUIET

S =
OBJS = main.obj
OBJS+= asmlib.obj
OBJS+= tool.obj
OBJS+= funs.obj
OBJS+= mmio.obj
OBJS+= test.obj

# explicit rules

all :   clean $(OUTPUTNAME).exe .SYMBOLIC
        #copy $(OUTPUTNAME).exe  t1.exe
        @%null

$(OUTPUTNAME).exe : .PRECIOUS $(OBJS)
                @echo file > (PROJECTNAME).lnk
                @for %i in ($(OBJS)) do @echo %i, >> (PROJECTNAME).lnk
        wlink $(LNKOPT) system $(OS) name $(OUTPUTNAME) @(PROJECTNAME).lnk
        @del (PROJECTNAME).lnk


run_all:    .SYMBOLIC
        %make run_mix

clean : .SYMBOLIC
        del *.obj /s
        del *.wbj /s
        del *.rex /s
        del *.exp /s
        del *.lst /s
       

# implicit rules

.c.obj :
        $(CC) $^& $(CFLAGS)
        $(LISTOPT)

.c.wbj :
        $(CC) $^& $(CFLAGS) -zw -fo=$^&.wbj

.for.obj :
        $(FC) $^& $(FFLAGS)

.asm.obj :
        $(ASM) $(AFLAGS) $^&
###########################################################################

Building command>> wmake -f makefile_test /a DEBUG=%DEBUG% PROCESSOR=%PROCESSOR%

2013年11月5日 星期二

在Ubuntu上,如何切換成root使用者?

How do I login as root user?

Open terminal and simply type the following command:

$ sudo bash

OR

$ sudo -s

Supply your password and you will become a root user.




from: http://www.cyberciti.biz/faq/ubuntu-linux-root-password-default-password/