uClinux:
vendors: 目标处理器相关,包括脚本,该处理器的默认的配置文件,在这里增加对目标处理器的支持
openswan: IPsec相关
config: 配置内核 make menuconfig&&xconfig&&config相关脚本
scripts/lxdialog: 实现内核配置时的菜单、消息(配置选择框)等的脚本文件
scripts/Menuconfig: (make menuconfig)实现配置选项的选择、取消、设置为模块、帮助工
tools: ucfront:gcc(ucfront-gcc,ucfront-g++)和ld(ucfront-ld)
bin: 产生flash image文件相关
autoconfig.h: 默认的make menuconfig的配置文件
config.arch: 由目标处理器产生的config文件
Makefile: 默认编译的是2.6内核(在make menuconfig里可选)
bin: flash相关
lib: 库文件夹:*.c、*.h
include: 指向lib下的*.h头文件
user: 用户应用程序,在这里增加应用程序
编译uClinux:
在 下载arm-elf-tools-20030314.sh(./arm-elf-tools-20030314.sh出错,不知道为什么,好象跟gzip有点关系),改为从<下载arm-linux-tools-20030930.tar.gz>(这个工具是把gcc编译的文件格式转换成uCLinux可执行的文件格式flat用的), 解压后替换原来/usr/local(注意备份原来的local目录),这个包的功能是安装工具链。
在 下载uClinux-dist-20070130.tar.gz
执行tar zxvf uClinux-dist-20041215.tar.gz并进入uClinux-dist目录。
make menuconfig(在此选择目标处理器和内核版本,配置内核和应用程序)
make dep (2.6内核好象不用)
make
增加glibc库:
只需在uClinux-dist目录下增加一目录glibc,把相关的源代码文件放在该目录中。
如何增加应用程序:
1、user/Makefile : 增加如下一行
dir_$(CONFIG_USER_NEWAPP_NEWAPP) += newapp
2、config/Configure.help:增加如下一行
CONFIG_USER_NEWAPP_NEWAPP
This program does fooey things to your bars.
3、config/config.in : 增加下列内容
bool 'newapp' CONFIG_USER_NEWAPP_NEWAPP
bool 'bar' CONFIG_USER_NEWAPP_BAR (如果user/newapp包含有make 'newapp'和'bar'的代码,就加上这句)
4、usr/newapp/Makefile : 内容如下(newapp下只有一个可执行文件的情况)
EXEC = newapp
OBJS = newapp.o
all : $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
romfs :
$(ROMFSINST) /bin/$(EXEC)
clean :
-rm -f $(EXEC) *.elf *.gdb *.o
arm-elf-tools生成的文件是flat格式,一种2进制文件格式
arm-linux-tools 生成的文件格式是elf,一种可以在x86体系下运行的可执行文件格式。
安装arm-elf-tools-20030314.sh(以root身份)
./arm-elf-tools-20030314.sh
If you get the error message 'tail: cannot open `+43' for reading: No such file or directory' when installing, change line 39 from:
tail +${SKIP} ${SCRIPT} | gunzip | tar xvf -
to:
tail -n+${SKIP} ${SCRIPT} | gunzip | tar xvf -
根目录下的Makefile文件:
make menuconfig项执行流程:
首先读入根目录下的config.in文件,该文件的作用是:在敲入make menuconfig之后,出现选择vendor,选定目标处理器后,再选择对应目标的不同型号的产品,选择内核版本、LIBC类型、导入、导出配置文件及其默认的值。
然后读入/config/script/lxdialog文件夹的内容,进行菜单,选项框等的设置。
最后读入的是/config/script/Menuconfig文件,配置内核,包括三态(*,空,M),选项帮助(调用的是/config/Configure.help文件),查看readme(/config/script/README.Menuconfig文件),导入、导出配置文件。
保存内核配置,执行/config/setconfig设置默认配置。
make操作时会自动完成内核、C库、应用程序的编译。
uClibc/libc/sysdeps/linux
与uClibc关联的目标处理器类型。If want to port uClibc to some new Linux architecture(mips,etc),this is the place to add that support.
uclinux/vendors/config:
对应各种平台的编译器、连接器,汇编器,CC、CXX
在linux特定版本目录下(如linux-2.6.x)配置特定目标处理器:
make arch=arm menuconfig
/uclinux-dist/tools/ucfront/ucfront.c:
查找编译器,查找GCC文件,添加共享库相关函数实现。
.PHONY : clean
.PHONY表示clean是伪文件,在Makefile文件中,make时不会自动执行,make clean时才执行。
查看包含特定字符串的文件:
find /workshop/uclinux -print |xargs grep CROSS_COMPILE 或
find / -name "*" -exec grep " CROSS_COMPILE " {} \; -print
查看文件占用空间:
du -h 可查看文件、目录的占用空间
df 查看已挂载的文件系统的空间使用情况
sh-linux-tools-20021008.tar.gz:
HITACHI
I386-linux-tools-20070808.tar.gz:
Soekris
M68k-elf-tools-20061214.sh:
SnapGear
Sparc-elf-tools-.tar.gz:
LEON-TSIM
Vendor目录下的目标处理器由特定交叉工具链来编译
步骤(不直接使用make):
1. make menuconfig
2. make dep:只有第一次编译的时候需要
3. make lib_only :编译uclibc
4. make user_only :编译应用程序
5. make romfs :组织成根文件系统
6. make image :生成romfs的镜像文件和linux的镜像文件
7. make linux :编译linux内核,需要第6步生成的romfs.o文件
8. make image :得到uclinux可执行文件的镜像
可用的交叉工具链:
阅读(2000) | 评论(0) | 转发(0) |