📄 zaiuclinuxxiajiachengxu.txt
字号:
uClinux应用程序开发
8.1 应用程序编写
8.1.1编写应用程序
基于uClinux系统的应用程序的开发通常是在标准Linux平台上或者使用Cygwin的Windows平台用交叉编译工具来完成。
本章主要介绍如何编写、移植、编译应用程序并将应用程序添加到文件系统的过程。
uClinux针对没有内存管理单元(MMU)的处理器和控制器而设计的,部分标准C函数在标准Linux下可以使用而在uClinux下不能使用,需要用户编写相应的库函数,但是绝大多数的函数还是通用的。因此在x86版本的gcc编译器下编译通过的软件,通常不需要做太大的改动就可以编译成可以在uClinux上运行的文件格式。
开发在uClinux 下运行的程序,基本上和开发在Linux下运行的程序是一样的,使用文本编辑器编写一个最简单的hello程序,代码如下:
#include
int main(void)
{ printf("Hello world!\n"); return 1; }
将其保存为hello.c文件,同时在/usr目录下面新建app目录作为应用程序的存放位置:
$:mkdir -p /usr/local/src/uclinux-dist/user/app 将hello.c拷贝到该目录下。
移植步骤
假定需移植Linux下源程序如example.c,确认编译生成的程序example能在Linux下正确执行。
$gcc -o example example.c $./example
按照移植注意事项改写源代码example.c,改写以后的文件命名为example_uc.c。
使用交叉编译工具编译example_uc.c,生成example_uc执行文件,下载到目标板上运行(下载方法见第九章)
如果出错则返回第二步。
编译命令如下:
$arm-elf-gcc -o example_uc example_uc.c -elf2flt
8.2 添加应用程序到文件系统中
将编写好的应用程序添加到文件系统中需要进行以下三个方面的工作。
(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) 修改配置相关文件
修改./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) 编译并执行
执行命令
make config
make dep
make lib_only
make user_only
make romfs
make image
make
其中在make config命令中必须选择 hello!
如果修改了应用程序重新编译,从make user_only开始执行命令即可。
用户在固化 uclinux 内核文件和romfs文件系统后,进入文件系统的bin目录执行hello应用程序。
8.3 快速添加应用程序
上节所述增加应用程序以及编译执行的过程比较正式,但也比较繁琐,在用户开发调试时并不方便,用户可以采用下述方法在开发调试过程中快速添加应用程序。
编译生成可执行文件 输入以下命令直接编译程序源代码文件,对于复杂一点的工程可以使用上节中的Makefile.
arm-elf-gcc -Wall -O2 -Wl,-elf2flt -o led led.c
生成的led是flat格式文件,可以在uClinux下直接运行。
复制可执行文件到文件系统 romfs目录是生成的文件系统目录,在执行make romfs命令时生成,如果已经执行过make romfs命令,用户可将生成的可执行文件led复制到romfs/bin目录,不必重复该命令。需要注意的是如果用户执行了make clean命令,romfs下的全部内容将被清除。 生成文件系统映像 直接执行下面的命令生成文件系统映像romfs.img:
genromfs -v -V "ROMdisk" -f romfs.img -d /usr/local/src/uclinux-s3cev40/romfs
这里的文件系统映像romfs.img包含了新增的应用程序led。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -