在uclinux下添加应用程序的步骤网上很多但是细节不容忽视 下面将自己的一些心得写下来以备忘 前提:uclinux已经移植编译成功
步骤基本上就是 : 1,在user目录下新建目录app在此目录下编写hello.c程序,然后gcc一把并执行 发现正确,则使用交叉编译工具再编译一下arm-elf-gcc -o hello hello.c -elf2flt 没有错误则删除生成的文件(除了hello.c)
切记:make后一定要删除生成的文件,因为当前linux环境下编译后生成的是elf格式的文件,在uclinux下是无法执行的!!!!!
4修改/uclinux -dist/config目录中的config.in config.help 5.make menuconfig 或者make config(建议使用前者) 6.注意了在mainmenu中一定要进入kerner/libary/....setting项目 然后有两项 Custom kerner setting(内核和驱动配置,编驱动时需要选中此项) Custom vendor setting(应用程序层配置,编应用程序需要选中此项我们选上) Exit //退出 7 自动到了配置应用程序页面 选中hello目录选中hello(前面出现*号) 8,make dep..................... 把image下的bin文件烧入你的board 然后reset重启 #ls bin 看到了hello 执行之 ok了么? -------------------------------------------
---------------------------------------------------------------
uClinux交叉编译环境建立起来了,内核编译通过了,下面就想加一个自己的小程序尝试一下...还是用skyeye仿真
首先,编写简单的程序:
输出100个Hello world
#i nclude<stdio.h> // 头文件不能少 不然编译器就找不到printf()函数了
int main (void)
{ int i=0; while((i++)<100) printf("Hello world!"); //while(1); }
用arm-elf-gcc 先编译一下,注意了,这里要加入必要的参数,不然成功不了的
$arm-elf-gcc -Wall -elf2flt -o hello hello.c
参数说明:
-Wall 输出所有警告信息
-elf2flt 这个就是要转化成flt的文件格式,没有这个参数链接时会出错的,
-o 输出文件名
编译成功了,hello 文件也出来,当然没想着 ./hello 在linux里运行看看.当然不行了,根本就是两码事,能运行出来那才是错了呢.
下来是编个makefile了,虽然程序有点小,但是还是写吧,这是个过程,到程序一大没有mak来管理我看是不行吧.参考了网上的资料,也考虑到呆会要加到uClinux系统里去.编写如下:
OUTPUT=hello #输出的可执行文件名,用宏定义,修改方便
OBJS=hello.c #源文件 CC=arm-elf-gcc #编译工具,不要写成 gcc 了,除非你想在linux上运行 LDFLAGS=-elf2flt -Wall #参数项,参照以上的说明确 LDFLIBS=-lc #要链接的库libc ,lib被省了
all:$(OUTPUT)
$(OUTPUT):$(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS) # 行首是个tab 不能直接在这复制,这是make的规则 romfs: ["$(CONFIG_USER_SAMPLE_HELLO)" != y]||cp $(OUTPUT) $(ROMFSDIR)/bin/ #这行首也是tab clean: rm -f $(OUTPUT) *.elf *.gdb *.o
#其它没定义的变量名,呆会在uClinux-dist 下make 的时候,会传进来的,不用管了
#romfs 以下那句,可能呆会参考后面的内容才会明白,意思就是把编译完结果hello可执行文件cp 到uClinux根目录下的bin文件夹
把上面的两个文件,放在uClinux-dist的user文件内,自己建个目录吧,
mkdir Asample
下面就是修改uClinux-dist的Makefile了,加个菜单项进去,让编译的时候选择是不是要编译hello.c;
1,、编辑文件 user/Makefile, 增加下面这行
dir_$(CONFIG_USER_SAMPLE_HELLO) += Asample 具体增加到哪里, 你打开文件就会发现相似的语句, 按照字母顺序, 放到合适的位置。
就是把自己建的目录加进去
2,、编辑文件 config/Configure.help, 增加下行
CONFIG_USER_SAMPLE_HELLO A example C program. This Program print "hello, world" on screen. 注意: 第2行以2个空格开头, 总长度小于70 个字符。就是为菜单项加入描述信息,不做也行
3,编辑文件 config/config.in
在 ‘ Games’部分(vi 下用 /Games 搜索,放心整个文件只有一个 Games ) 后添加新的菜单部分 ######################### //起分隔作用 mainmenu_option next_comment comment ‘ Asample’ bool ‘ hello’ CONFIG_USER_SAMPLE_HELLO ###bool 变量 y/n endmenu
这下明白了,这里的菜单为变量CONFIG_USER_SAMPLE_HELLO 赋值了,然后又传到 我们程序hello 的makefile 里去了。
修改好了之后,
make menuconfig
* 后面出现关于 hello 的菜单选择项 输入y回车
make dep
make
完了之后,进入image
skyeye -e linux
shell命令下:
> cd bin
>ls
看hello 在那里了,
这下./hello
看好多个hello world 出来了 当然你想一万个都可以,这不用说了
|