ltazh 发表于 2009-4-20 14:04:12

新手:Skyeye模拟uClinux上运行的第一个程序:Hello World

通过昨天一下午的搜集资料和学习,成功的在uClinux上运行了我的第一个application,Hello World!

真的感觉网络上的资源真是太多了,只有你想不到的,没有你找不到的。网络真的帮助了我很多。

下面就介绍一下这个程序是怎么运行的。

运行环境:虚拟机Redhat linux 9.0,skyeye,uClinux,交叉编译环境。

首先是编写程序,这个HelloWorld的程序,对于学习过编程的人来说简直太简单不过了。代码如下:

#include
int main(void)
{
printf("Hello,uClinux! ");
return(0);
}

我们对这个程序命名为:hello.c

然后要编写一个makefile文件,这个对于熟悉linux的人来说应该很熟悉,但是对于我这个初学者来说,可以说是一窍不通。呵呵。但是通过昨天的学习,对与makefile的编写有了一定的了解。makefile的代码如下:

CC = arm-elf-gcc
CFLAGS = -D_PIC_ -fpic -msingle-pic-base -02 -pipe -Wall -g
LDFLAGS = -Wl,-elf2flt
LIBS =
OBJS = hello.o
all: hello
hello: $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) -o hello $(OBJS) $(LIBS)
clean:
rm -rf *.o *.elf *.gdb hello

我们把这两个文件放入一个文件夹/sample中。然后在终端Shell中进入这个文件夹 cd /home/uClinux-dist/usr/sample 运行make。然后这个文件夹中将生成三个文件。我们只要hello这个可执行程序。将该可执行文件复制到uClinux映像文件目录(/home/user/uClinux/romfs/bin)中

以上工作做好了后,就要通知uClinux我们又加入一个应用程序了。

起初,我以为在uClinux上运行程序,就象在windows上一样,只要将可执行程序拷贝到相关目录下就可以执行。通过自己的实验,发现根本就不行,你拷贝进去的文件在uClinux下根本就找不到。最后,通过上网查找,才知道原来如果你要加入一个应用进去,你就要重新编译一次内核。跟我起初的想法根本不一样。那么怎么才能让uClinux知道我们加入了一个应用程序呢。下面介绍。

编辑uClinux目录下的文件user/Makefile,增加下面这行文字:

    dir_$(CONFIG_USER_SAMPLE_HELLO) += sample

编辑uClinux目录下的文件config/Configure.help,在文件末尾追加下面这段文字:

    CONFIG_USER_SAMPLE_HELLO

    This is an example C program in uClinux OS, and it will print "Hello, uClinux!" on screen.

注意:第一行要顶头写,第二行则要以2个空格开头,总长度小于70个字符。

编辑uClinux目录下的文件config/config.in,在文件末尾追加下面这段文字:

    #########################

    mainmenu_option next_comment

    comment 'Sample'

    bool 'hello' CONFIG_USER_SAMPLE_HELLO

    endmenu

    #########################

然后返回uClinux的根目录下,重新编译内核,不过这个过程就不用像第一遍编译内核那么复杂了,可以只编译连接最后需要生成的那个镜像文件即可:

genromfs -v -V "ROMdisk" -f ./images/romfs.img -d ./romfs
make image
make

最后进入Skyeye,target sim ,load,run。输入hello,我们的程序就跑起来了。

如果一切顺利的话,这个过程应该不会太久。

这是我第一个程序运行的过程。希望对和我一样的初学者有帮助。

dongzhichen 发表于 2009-11-28 14:16:03

其实就一条语句就行 skyeye -e linux-2.4.x/linux 不用target sim load run这样做
页: [1]
查看完整版本: 新手:Skyeye模拟uClinux上运行的第一个程序:Hello World