?? zaiuclinuxxiajiachengxu.txt
字號:
uClinux應(yīng)用程序開發(fā)
8.1 應(yīng)用程序編寫
8.1.1編寫應(yīng)用程序
基于uClinux系統(tǒng)的應(yīng)用程序的開發(fā)通常是在標準Linux平臺上或者使用Cygwin的Windows平臺用交叉編譯工具來完成。
本章主要介紹如何編寫、移植、編譯應(yīng)用程序并將應(yīng)用程序添加到文件系統(tǒng)的過程。
uClinux針對沒有內(nèi)存管理單元(MMU)的處理器和控制器而設(shè)計的,部分標準C函數(shù)在標準Linux下可以使用而在uClinux下不能使用,需要用戶編寫相應(yīng)的庫函數(shù),但是絕大多數(shù)的函數(shù)還是通用的。因此在x86版本的gcc編譯器下編譯通過的軟件,通常不需要做太大的改動就可以編譯成可以在uClinux上運行的文件格式。
開發(fā)在uClinux 下運行的程序,基本上和開發(fā)在Linux下運行的程序是一樣的,使用文本編輯器編寫一個最簡單的hello程序,代碼如下:
#include
int main(void)
{ printf("Hello world!\n"); return 1; }
將其保存為hello.c文件,同時在/usr目錄下面新建app目錄作為應(yīng)用程序的存放位置:
$:mkdir -p /usr/local/src/uclinux-dist/user/app 將hello.c拷貝到該目錄下。
移植步驟
假定需移植Linux下源程序如example.c,確認編譯生成的程序example能在Linux下正確執(zhí)行。
$gcc -o example example.c $./example
按照移植注意事項改寫源代碼example.c,改寫以后的文件命名為example_uc.c。
使用交叉編譯工具編譯example_uc.c,生成example_uc執(zhí)行文件,下載到目標板上運行(下載方法見第九章)
如果出錯則返回第二步。
編譯命令如下:
$arm-elf-gcc -o example_uc example_uc.c -elf2flt
8.2 添加應(yīng)用程序到文件系統(tǒng)中
將編寫好的應(yīng)用程序添加到文件系統(tǒng)中需要進行以下三個方面的工作。
(1) 編寫Makefile 編寫此程序的工程管理文件Makefile,代碼如下:
GNUEXEC = hello
OBJS = hello.o
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
romfs:
$(ROMFSINST) /bin/$(EXEC)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o
(2) 修改配置相關(guān)文件
修改./config/config.in,在最后面增加菜單:
########################################################################
mainmenu_option next_comment
comment 'User Application'
bool 'Hello' CONFIG_USER_HELLO
comment "User Application"
endmenu
########################################################################
或者在合適的菜單塊中增加一行:
bool 'Hello' CONFIG_USER_HELLO
修改 ./config/Configure.help,Configure.help包含配置時顯示的描述文本,在文件中增加:
CONFIG_USER_HELLO This program print hello on screen.
注意描述文本必須縮進兩空格,不能包括空行且必須少于70各字符
(3) 修改用戶程序工程管理文件
在 ../user/Makefile 中,增加行 dir_$(CONFIG_USER_HELLO) += app
增加了用戶工程目錄到待編譯工程目錄列表,通常按照目錄名稱的字母順序插入該行。
(4) 編譯并執(zhí)行
執(zhí)行命令
make config
make dep
make lib_only
make user_only
make romfs
make image
make
其中在make config命令中必須選擇 hello!
如果修改了應(yīng)用程序重新編譯,從make user_only開始執(zhí)行命令即可。
用戶在固化 uclinux 內(nèi)核文件和romfs文件系統(tǒng)后,進入文件系統(tǒng)的bin目錄執(zhí)行hello應(yīng)用程序。
8.3 快速添加應(yīng)用程序
上節(jié)所述增加應(yīng)用程序以及編譯執(zhí)行的過程比較正式,但也比較繁瑣,在用戶開發(fā)調(diào)試時并不方便,用戶可以采用下述方法在開發(fā)調(diào)試過程中快速添加應(yīng)用程序。
編譯生成可執(zhí)行文件 輸入以下命令直接編譯程序源代碼文件,對于復(fù)雜一點的工程可以使用上節(jié)中的Makefile.
arm-elf-gcc -Wall -O2 -Wl,-elf2flt -o led led.c
生成的led是flat格式文件,可以在uClinux下直接運行。
復(fù)制可執(zhí)行文件到文件系統(tǒng) romfs目錄是生成的文件系統(tǒng)目錄,在執(zhí)行make romfs命令時生成,如果已經(jīng)執(zhí)行過make romfs命令,用戶可將生成的可執(zhí)行文件led復(fù)制到romfs/bin目錄,不必重復(fù)該命令。需要注意的是如果用戶執(zhí)行了make clean命令,romfs下的全部內(nèi)容將被清除。 生成文件系統(tǒng)映像 直接執(zhí)行下面的命令生成文件系統(tǒng)映像romfs.img:
genromfs -v -V "ROMdisk" -f romfs.img -d /usr/local/src/uclinux-s3cev40/romfs
這里的文件系統(tǒng)映像romfs.img包含了新增的應(yīng)用程序led。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -