更新时间:2022-08-03 19:55
主机和目标机是基于不同体系架构的开发,宿主机开发、编译,目标机运行进行嵌入式开发之前,首先需要安装交叉工具链,网络协议栈以及驱动程序开发。协议栈分为新协议的开发和基于已有协议设计新的处理例程;驱动包括字符设备驱动、块设备驱动、网络设备驱动。
1. 硬件设计,网卡、USB控制器等
2. BootLoader移植
3. Kernel移植。内核移植又名最小系统移植,移植后的内核具备网络通、串口通、根文件系统可用等基
本条件。
4. 5. 应用程序的开发。C函数库(Uclibc/Glibc)、QT图形化应用程序开发、网络应用程序开发
宿步骤如下:
1. #tar zxvf arm-linux-gcc-4.3.2.tar.gz -C /
2. (1)一次性:执行export在PATH环境变量中添加路径 #export 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 可产看文件所用到的动态共享链接
嵌入式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
#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:网络文件系统
嵌入式产品的核心是嵌入式微处理器。嵌入式微处理器一般就具备以下4个特点:
1.对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。
2.具有功能很强的存储区保护功能。这是由于嵌入式产品的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。
3.可扩展的处理器结构,以能最迅速地开展出满足应用的最高性能的嵌入式微处理器。
4.嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式产品更是如此,如需要功耗只有mW甚至μW级。
1.嵌入式产品通常是面向特定应用的嵌入式CPU与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式产品设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。
2.嵌入式产品是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
3.嵌入式产品的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。
4.嵌入式产品和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式产品产品一旦进入市场,具有较长的生命周期。
5.为了提高执行速度和系统可靠性,嵌入式产品中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
6.嵌入式产品本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。