在uclinux下添加应用程序的步骤网上很多但是细节不容忽视
下面将自己的一些心得写下来以备忘
前提:uclinux已经移植编译成功
还是假设添加显示hello word的程序吧
步骤基本上就是 :
1,在user目录下新建目录app在此目录下编写hello.c程序,然后gcc一把并执行
发现正确,则使用交叉编译工具再编译一下arm-elf-gcc -o hello hello.c -elf2flt
没有错误则删除生成的文件(除了hello.c)
2,还在app目录下编写makefile文件,编写完成后make一把看看有没有错误
切记:make后一定要删除生成的文件,因为当前linux环境下编译后生成的是elf格式的文件,在uclinux下是无法执行的!!!!!
3,修改、user目录下的makefile
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添加自定义应用程序的详细过程
基本步骤
1 在user下建一个目录,在这个目录下编写.c文件和makefile(最好先gcc一把试试)
2 改写user下的makefile
3 改写configin 改写config。help
4 编内核make menuconfig加上定义的程序
5 烧写
时间:2007-04-03 09:48:03 来源:Linux联盟收集整理作者:
( 文中所用的路径为uclinux 安装的相对路径, 比如: /uClinux-Samsung)编译uclinux 并运行成功后, 下一步的工作就是写个最经典、最简单的程序“ hello, world” 。
在uclinux下, 当然要比在普通的OS下麻烦些。( 我用的是ANYWHERE-Ⅱ 开发板, 不同的开发板的过程应相似)我基本是按照 Documentation/Adding-User-Apps-HOWTO 的步骤进行, 有部分修改。
1、在user 目录下创建新目录 user/sample, 用来存放源代码。写“ hello.c” 文件。( “ hello.c” 文件如何写,不用我说了吧。)
2、编辑文件 user/Makefile,
增加下面这行 dir_$(CONFIG_USER_SAMPLE_HELLO) += sample
具体增加到哪里, 你打开文件就会发现相似的语句, 按照字母顺序, 放到合适的位置。
3、编辑文件 config/Configure.help,
增加下行
CONFIG_USER_SAMPLE_HELLO
A example C program. This Program print "hello, world" on screen.
注意: 第2行以2个空格开头, 总长度小于70 个字符。
4、编辑文件 config/config.in
在 ‘ Games’ 后添加新的部分
#########################
mainmenu_option next_comment
comment ‘ Sample’
bool ‘ hello’ CONFIG_USER_SAMPLE_HELLO
endmenu
( 注意这里的单引号字符不对, 不要直接COPY这里的字符, 最好自己手工输入, 或参考文件中已有的行修改。)
5、创建合适的 user/sample/Makefile 文件
HELLO = hello
HELLOOBJS = hello.o
all: $(HELLO) $(HELLO): $(HELLOOBJS)
$(CC) $(LDFLAGS) -o $@ $(HELLOOBJS) $(LDLIBS)
romfs:
["$(CONFIG_USER_SAMPLE_HELLO)" != y] || cp hello $(ROMFSDIR)/bin/. clean:
-rm -f $(HELLO) *.elf *.gdb *.o
6、重新编译生成image.rom。注意在运行make config 或make menuconfig时选择生成"hello" 。
是否Makefile 文件中修改如下:
romfs:
["$(CONFIG_USER_SAMPLE_HELLO)" == y] || cp hello $(ROMFSDIR)/bin/.
是否能默认选择“ hello” , 我还未试。
7、烧写image.rom, 运行 >hello 即可看到输出“ hello, world"
8、完毕。
注意:GCC前必须要用[Tab],否则会出现错误:missing separator. Stop.
---------------------------------------------------------------
uClinux交叉编译环境建立起来了,内核编译通过了,下面就想加一个自己的小程序尝试一下...还是用skyeye仿真
首先,编写简单的程序:
输出100个Hello world
#i nclude // 头文件不能少 不然编译器就找不到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 出来了 当然你想一万个都可以,这不用说了