uclinux添加应用程序

uclinux添加应用程序 细节
2010-03-31 9:01

在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<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 出来了 当然你想一万个都可以,这不用说了

你可能感兴趣的:(linux,user,gcc,makefile,编译器,output)