=cpu/arm920t/start.s :该文件包含了u-boot中stage1阶段的代码,负责初始化硬件环境,把u-boot从flash加载到RAM中去,然后跳到lib_arm/board.c中的start_armboot中去执行;
lib_arm/board.c :该文件包含了u-boot中stage2阶段的代码,初始化全局数据结构以及设备和控制台;
board/smdk2410/flash.c :该文件中包含=
sbc2410开发板的资源配置,如内存地址,flash型号,外围芯片如网络芯片等;
顶层目录下的Makefile文件 :该文件负责u-boot整体编译配置,每一种开发板在Makefile中都有自己配置的定义,例如smdk2410开发板的定义如下:
smdk2410_config : unconfig arm920t smdk2410 NULL s3c24x0
其中各项的含义如下: arm:CPU架构 arm920t:CPU类型 smdk2410:开发板型号 NULL:开发者
S3c24x0:片上系统SOC
按照上面的定义我们可以在Makefile文件中增加自己的开发板信息
sbc2410_config : unconfig arm920t sbc2410 NULL s3c24x0
3.5 通过交叉编译生成u-boot.bin二进制文件
make sbc2410_config
make CROSS_COMPILE=arm-linux- 3.6 烧写
使用Flash烧写工具sjf2410,通过JTAG接口将u-boot.bin烧写到开发板SBC2410的Nor Flash中。
的内核地址空间,具有单内核系统简单和高性能的特点[3];同时,Linux系统也汲取了微内核的精华,引入了独具特色的模块化设计、抢占式内核,支持内核线程及动态加载内核模块,从而又具有微内核系统的优点,且避免了微内核性能损失的缺陷,同时兼具二者的优点[4]。
Linux操作系统的模块化设计使得用户可以根据具体的应用编译出满足要求的最精简的操作系统内核,大大降低了嵌入式系统的资源消耗,使其更适合嵌入式领域的应用[5]。通过下面的步骤可以编译出一个Linux操作系统内核。
进入Linux源代码的顶层目录,执行以下命令: make mrproper ARCH=arm /*清除原有内核的配置与中间文件*/ make menuconfig ARCH=arm /* 在图形界面中根据自己的需要选择模块,对于不清楚的按照其默认设置,完成后保存退出 */
make dep ARCH=arm CROSS_COMPILE= arm-linux-
/* 建立依赖关系 */
make zImage ARCH=arm CROSS_COMPILE= arm-linux-
/* 编译内核 */
编译操作完成后,最终生成操作系统内核[6] arch/arm/boot/zImage
@/mkconfig $(@:_config) arm
5 构建根文件系统
根文件系统是Linux系统启动时必须挂载的文件系统,它和普通的文件系统的区别在于它包含了Linux启动时所必须的目录和关键性的文件,例如Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序的bin目录等。任何包括这些Linux系统启动所必须的文件的系统都可以成为根文件系统。 5.1 创建根文件系统目录结构
mkdir bin dev lib proc sbin sys usr mnt tmp var usr/bin usr/lib usr/sbin lib/modules [7] /* 创建目录结构 */
mknod –m 666 console c 5 1 /* 创建设备文件 */
Application Case 实用案例 155
@./mkconfig $(@:_config) arm Linux启动时都需要有init目录下的相关文件,在
4 编译内核
Linux操作系统是一个单内核系统,运行在单独
嵌入式,可信计算
计 算 机 系 统 应 用 2010 年 第19卷 第 10 期
mknod –m 666 null c 1 3 /*创建设备文件*/
cp etc-linux/* etc/ -rf /* 复制配置文件 */
5.2 安装内核模块
进入linux内核源代码顶层目录,执行下面命令: make modules ARCHarm CROSS_ COMPILE=arm-linux-
make modules_install ARCH=arm INSTALL_ MOD_PATH
=/home /rootfs
模块安装完后在文件系统的lib/modules下会产生内核生成的模块。 5.3 编译安装busybox
BusyBox被称作是嵌入式开发的瑞士军刀:实用、短小、稳定。
Busybox可以理解为一个Linux的命令集合,我们在进行Linux操作时所需要的常用命令,都可以在busybox里找到,但busybox又不是简单的将所有的命令集合在一起,它采用了一种非常巧妙的方式,
=即“使用一个程序完成所有的事”。
平时我们用ls、vi等命令,都要用到glibc的相关调用,如果每个命令都静态链接这些调用,势必每个命令都会很大,因此在通常的发行版中,都会动态链接glibc,可是glibc的动态库本身就很大,这在PC+Linux平时上还可以接受,但在嵌入式系统中,这就太大了,而且又不是所有的库函数都使用。
一般采用两种解决办法,一种是裁剪glibc,另一种就是使用busybox,busybox把ls、vi等程序的main函数改名后,全部链接在一起,然后静态链接glibc,这样,只有需要的调用的代码才会链接进来,从而使整个busybox程序可能都比glibc的动态库小。
5.3.1 裁剪busybox
make clean 清除旧的编译文件
make menuconfig 执行该命令以后,进入配置主菜单。
首先进入菜单Build Options,选择“Do you want to build BusyBox with a Cross Compiler?”选项,并在“Cross Compiler prefix”栏中输入交叉编译器安装的位置,如/usr/local/arm/2.95.3/ 156实用案例 Application Case
bin/arm-linux-,注意最后是arm- linux-,不能加其他字符或空格;
然后在“Any extra CFLAGS options for the compiler”栏中输入需要匹配的arm-linux系统源码目录中头文件所在的位置,如“/home/linux /include”,然后返回主菜单;
再根据系统需要,进入所需命令工具所在的子菜单中,选择相应的命令项,如需要insmod命令,就在“Linux Module Utilities”子菜单中选中;
选择完成所需的全部命令后,保存配置文件并退出;
5.3.2 编译并安装busybox
Make make install 5.4 制作ramdisk
genext2fs –b 8192 –d /home/roofts ramdisk
gzip -9 –r ramdisk
根文件系统构建完成,最终生成文件ramdisk.gz
6 下载OS内核并配置开发板环境变量
6.1 首先配置宿主机和开发板的IP地址,并启动tftp服务器
6.2 将zImage和ramdisk.gz下载到开发板的Nor Flash中
erase 0x30000 1fffff /*擦出NorFlash为下载软件腾出空间*/
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说公务员考试嵌入式Linux系统在ARM平台上的构建(2)在线全文阅读。
相关推荐: