一,【嵌入式产品开发流程】 1. 硬件设计,网卡、USB控制器等
2. BootLoader移植
3. Kernel移植。内核移植又名最小系统移植,移植后的内核具备网络通、串口通、根文件系统可用等基
本条件。
4. 5. 应用程序的开发。C函数库(Uclibc/Glibc)、QT图形化应用程序开发、网络应用程序开发
6. 功能测试、性能测试、系统集成测试、实验局、新产品发布
二,【交叉工具链】
宿步骤如下:
1. #tar zxvf arm-linux-gcc-4.3.2.tar.gz -C /
2. (1)一次性:执行export在PATH环境变量中添加路径 #export PATH=$PATH:/usr/local/arm/4.3.2/bin (2)永久性:修改/etc/profile,添加 pathmunge /usr/local/arm/4.3.2/bin
编译器: #arm-linux-gcc hello.c -o hello
反汇编工具:#arm-linux-objdump -D -S hello >log
#arm-linux-gcc -g hello.c -o hello #arm-linux-objdump -D -S hello >log 这两句执行后将在log文件生成汇编、C逐句对照信息
ELF文件查看工具:#arm-linux-readelf -a hello 可查看文件运行架构、大小端等信息。 #arm-linux-readelf -a hello 可产看文件所用到的动态共享链接库,一般编译时加上"-static"选项
三,【内核制作】
嵌入式Linux系统由Linux内核与根文件系统两部分构成,二者缺一不可。内核制作步骤如下:
1. 清除原有配置与中间文件 #make distclean
2. 配置内核
X86:#make menuconfig arm:#make menuconfig ARCH=arm
参考配置在arch/arm/configs目录下,注意配置NFS与ramdisk文件系统的区别
3. 编译内核
X86:#make bzImage
arm:#make uImage ARCH=arm CROSS_COMPILE=arm-linux- 首先得将u-boot/tools/目录中的mkimage cp至/bin目录下
四,【根文件系统】
根文件系统是Linux启动使用的第一个文件系统,由一系列目录组成,包括应用程序、C库以及相关配置文
件
1. 创建根文件系统的目录
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin sys usr mnt tmp var
#mkdir usr/bin usr/sbin usr/lib lib/modules
2. 创建设备文件
#cd dev/
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
#cd ..
3. 安装/etc
#tar zxvf etc.tar.gz -C /XXX/rootfs
4. 编译内核模块
进入内核根目录执行命令:
#make modules ARCH=arm CROSS_COMPILE=arm-linux-
5. 安装内核模块
#make modules_install ARCH=arm INSTALL_MOD_PATH=/XXX/rootfs 实质是将编译好的内核模块从内核代码中cp至/XXX/rootfs/lib/modules路径下
6. 配置Busybox
进入busybox目录执行 #make menuconfig
(1)进入Busybox Settings->Build Options->
选中“Build Busybox as a static binary”,静态链接
Cross Compiler Prefix (arm-linux-)
(2)进入Busybox Settings->Installation Options->
选中“Don't use /usr”避免busybox被安装到宿主机/usr目录下,破坏宿主机系统
Busybox Installation Prefix (/XXX/rootfs) 指明编译后Busybox的安装位置
7. 编译、安装busybox
#make ARCH=arm CROSS_COMPILE=arm-linux-
#make install
五,【ramdisk制作】
#genext2fs -b 8192 -d /XXX/rootfs ramdisk
#gzip -9 -f ramdisk
六,【文件系统】
常见的文件系统类型有:Jffs2,Yaffs,Cramfs,Ramdisk,NFS等,配置内核时选择文件系统类型。
Jffs2: 用于NorFlash,可读写,可压缩
Yaffs: 用于NandFlash,速度快,不支持数据压缩
Cramfs:用于NandFlash和NorFlash,只读的压缩文件系统
Ramdisk:实质并非文件系统,是将实际文件系统(如:ext2)装入内存的机制
NFS:网络文件系统