




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 嵌入式Linux系统构建6.1 Linux内核的裁剪和编译Linux内核裁剪的目的是根据应用的需要,裁剪掉嵌入式应用中不需要的功能和代码,留下必要的功能和代码,可以减小内核尺寸,较少存储器需求,降低嵌入式系统功耗,教学系统体积。内核裁减集的原理是打开一个菜单,让开发人员在其中选择所需要的功能、特色、配置和参数,配置工具为选择的功能定义相应的C语言宏,并通过编译命令的-D选项传给内核源程序,内核源代码中对宏定义进行检查,使用条件编译的手段,将对仅需要的特色和功能进行编译,生成内核,而未选择的功能和特色则不进行编译,从而达到裁剪内核的目的。Linux内核的裁剪工作包括内核配置、内核编译、根文件系统构建等工作,具体过程介绍如下。6.1.1重新编译生成一个新的X86系统内核(1)将新下载的内核源码复制到/usr/src目录并配置内核相关信息1)复制内核源码到/usr/src目录:# cp linux-2.4.20.bz2 /usr/src/# cd /usr/src# tar zfvj linux-2.4.20.bz2# ln -s linux-2.4.20 linux# cd linux或# cd /usr/src/linux-2.4.20-82) 清理源代码树# make mrpropermake mrproper命令会删除所有的编译生成文件、内核配置文件(.config文件)和各种备份文件,所以几乎只在第一次执行内核编译前才用这条命令。3) 进入menuconfig配置菜单:# make menuconfig进入基于ncurses文本模式图形用户配置界面,该方法不需调用X Window,兼容性和适用性好,操作简单,使用方便。而make config则采用对每个配置选项进行单独询问和回答模式,使用麻烦,效率低;make xconfig要求基于X Windows图形库,界面美观,但有时存在兼容性问题。(2)编译生成新的内核1)删除以前编译生成各种.o目标文件,但保留内核的配置文件.config# make clean2) 对内核配置阶段选择的功能和特色进行依赖关系分析,这些功能运行所需要的特色和代码添加到裁剪后的内核中。# make dep3)编译新内核和内核模块# make zImage4) 编译可加载模块(即内核选项中选择为M的选项),编译时间跟M选项的数量有关,并将编译好的modules拷贝到/lib/modules下。# make modules# make modules_inatall(4) 最终生成的压缩映像的路径arch/i386/boot/zImage(5) 用新的内核启动Linux1) 将新内核复制到/boot目录 # cp /usr/src/linux/arch/i386/boot/bzImage/boot/vmlinuz-x.y.z2)将启动映象文件复制到/boot目录 # cp /usr/src/linux/System.map /boot/System-x.y.z.map3)修改启动设置文件目前大多数使用的都是grub启动,需要修改/boot/grub/grub.conf,添加相应的启动信息,添加内容的最简单格式如下:title 显示在启动菜单上的名称root 根文件系统挂载分区kernel 压缩过的内核文件名initrd 根文件系统文件名 如: title My new kernel root (hd0,2) kernel /boot/vmlinuz-x.y.z initrd /boot/initrd-x.y.z.img6.1.2重新编译生成一个新的ARM系统内核(1)按照ARM嵌入式系统的软硬件配置和功能进行内核配置1) 进入ARM内核所在目录# cd /arm2410s/kernel-2410s2) 进入menuconfig配置菜单,配置内核,进行所需的更改之后,按Esc键退出界面并保存。# make menuconfig(2)编译生成新的内核1)删除以前编译生成各种.o目标文件,但保留内核的配置文件.config# make clean2) 对内核配置阶段选择的功能和特色进行依赖关系分析,这些功能运行所需要的特色和代码添加到裁剪后的内核中。# make dep3)编译新内核和内核模块# make zImage# make modules(4) 最终生成的压缩映像的路径arch/arm/boot/zImage6.2 根文件系统的制作6.2.1 根文件系统的结构根文件系统包括支持Linux正常运行所需的程序和数据,如系统命令文件、运行库、系统进程代码和配置文件,包括:n 基本文件系统结构:/dev,/proc,/bin,/etc,/lib,/usr,/tmp,/var,/home,/mnt n 基本程序运行所需函数库:glibc, uclibcn 基本系统配置文件: rc, inittabn 必要的设备支持文件: /dev/hd*, /dev/tty*, /dev/fda0n 必要的系统命令:sh, ls, cp, mv, rz, ifconfig6.2.2 制作根文件系统映像本节讲述如何在旧的根文件系统中加入新命令或文件的过程。(1)将旧的根文件系统解压缩到一个目录中1)复制旧的根文件系统映像文件 # cp linux-v7.2/img/root.cramfs . 当前目录是/root 2)挂载旧根文件系统 # mount -o loop root.cramfs /mnt/nfs 3)把根文件系统的内容复制出来 # cp -rf /mnt/nfs/ /root/rootfs (2)将新的文件加入到根文件系统目录中1)编辑一个hello world 的C程序,然后编译 # armv4l-unknown-linux-gcc -o hello hello.c 2)移动编译出来的hello文件到/root/rootfs/ # mv hello /root/rootfs 当前目录是/root (3)将/root/rootfs中的文件打包要成cramfs文件系统类型的映像文件 # mkfs.cramfs rootfs/ rootfs.cramfs (4)烧写新的根文件系统1)复制rootfs.cramfs到虚拟机与Linux的共享目录 # cp rootfs.cramfs /mnt/hgfs/share 2)重启实验箱,按任意键(除了Enter键)进入vivi的命令行界面,然后输入命令 n Load flash root x n 打开超级终端的“传送”-“发送文件”,“浏览”选择虚拟机与Linux的共享目录E:share里的rootfs.cramfs,“协议”选择Xmodern,最后点击“发送” (5)测试新加入根文件系统的命令n 待烧写完后重启实验箱,按“Enter键“进入Linux n 查看在根目录下是否存在可执行文件hello# ls # ./hello 6.3. VIVI、内核和根文件系统的烧写6.3.1 超级终端设置Windows超级终端将Windows的串行口与开发板的串行口相连,是嵌入式Linux的访问接口,用于输入输出、信息显示和程序下载。超级终端必修进行正确的设置才能与嵌入式开发板建立连接,需要设置的参数包括:(1)用串口线将PC的串口(缺省为COM1)与开发板串口(VIVI和Linux内核缺省使用COM1,若要修改串口号,则应修改vivi和linux内核源代码并进行重新编译);(2) 设置超级终端的串口号,一般用COM1,因为串口线物理上连接了PC的COM1;(3)设置波特率,必须与vivi和Linux内核中对串口的设置一致,缺省为115200bps;(4)设置数据位、停止位和校验方式,必须与vivi和Linux内核中对串口的设置一致,缺省为N81。具体设置方法如下:(1)运行Windows系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端。如果要求输入区号、电话号码等信息请随意输入,出现如图2-12所示对话框时,为所建超级终端取名为arm,可以为其选一个图标。单击“确定”按钮。图1.5.1 创建超级终端(2)在接下来的对话框中选择ARM开发平台实际连接的PC机串口(如COM1),按确定后出现如图2-13所示的属性对话框,设置通信的格式和协议。这里波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。按确定完成设置。图1.5.2 设置串行口(3)完成新建超级终端的设置以后,可以选择超级终端文件菜单中的另存为,把设置好的超级终端保存在桌面上,以备后用。用串口线将PC 机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。在Windows xp 平台下通过超级终端烧写vivi(bootloader)、内核(Kernel)、根文件系统(root)的步骤如下:(1)复位2410S 开发板,按住pc 机键盘的“Back Space”键,进入vivi命令模式,格式化flash 并重新分区;(2)运行load flash vivi|kernel|root x,此命令用于使用xmodem 协议通过串口下载文件到开发板中,其中参数为vivi|kernel|root 之一;(3)启用FTP 服务,上传应用程序压缩包并解压缩;(4)重新启动验证烧录是否成功。6.3.2 格式化flash打开超级终端,先按住PC 机键盘的Back Space 键,然后启动2410-S,进入vivi,按照以下命令格式化flash,重新分区,如图1.5.3。vivibon part 0 128k 192k 1216k 4288k:m 64704k 回车图1.5.3 格式化flash6.3.3 烧写vivi这时已格式化flash,运行的是SDRAM 中的vivi.注意如果这时重启或断电会丢失所有数据,否则必须用Jtag 重新烧写vivi。viviload flash vivi x 回车此时超级终端提示:Ready for downloading using xmodem.Waiting.点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择协议为Xmodem,选择镜像文件vivi,点击“发送”,如图1.5.4,10 秒左右vivi 就烧写到flash 里了.这时要复位2410S,重新进入vivi来烧写kernel,root.图1.5.4 烧写vivi6.3.4 烧写内核映象zImageviviload flash kernel x 回车出现提示:Ready for downloading using xmodem.Waiting.点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择镜像文件zImage,协议为Xmodem,点击“发送”,如图1.5.5,4 分钟左右zImage 传输完毕,zImage 先传输到SDRAM中,再把数据从SDRAM 复制到flash 里,请等待这一过程结束到出现vivi,再烧写root,否则会导致烧写kernel 失败。图1.5.5 烧写zImage6.3.5烧写根文件系统(root)viviload flash root x 回车Ready for downloading using xmodem.Waiting.点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择镜像文件root.cramfs,协议为Xmodem,点击“发送”,如图1.5.6,8 分钟左右root.cramfs 烧写完毕图 1.5.6 烧写根文件系统6.3.6 使用Jtag 烧写VIVI利用串口烧写vivi、kernel和root具有速度快的优点,但要求vivi先工作起来,整个过程在ivi的控制下完成。但如果开发板上尚未烧写vivi或vivi不能正常工作,这是就需要寻找其他途径先烧写vivi。由于此时开发板上还没有任何程序,CPU还没有工作,必须依靠另一种绕过CPU和存储器总线读写开发板FLASH的硬件通路,这就是Jtag。Jtag依靠四根线,可在CPU不工作的条件下将vivi烧写到flash中,由于数据一位一位移入开发板,因此烧写速度比串口更慢,因此一般仅用于开发板上第一个引导程序的烧写。具体过程为:(1)连接线路并口线连接到pc 机并口端,同时,并口线另一端与Jtag 简易仿真器相连,Jtag 简易仿真器接开发板的14 针JTAG 口,启动2410-S。(2)软件准备把整个GIVEIO 目录(在imgflashvivi 目录下)拷贝到C:WINDOWS 下,并把该目录下的giveio.sys 文件拷贝到C:WINDOWSsystem32drivers 下。(3)添加驱动在控制面板里,选添加硬件,下一步选择“是,我已经连接了此硬件”,下一步选择“添加新的硬件设备”(见图1.5.10),下一步选择“安装我手动从列表选择的硬件”,下一步选择“显示所有设备”在厂商一项中默认为“%”,型号为“giveio”(见图1.5.11),直接点击“从磁盘安装”,点击“浏览”,指定驱动为C:WINDOWSGIVEIOgiveio.inf,点击确定,完成添加硬件。图 1.5.10 添加新的硬件设备图 1.5.11 选择设备驱动程序(4)烧写vivivivi 是由韩国MIZI 公司提供的一款针对S3c2410 芯片的Bootloader。烧写之前把要烧写的vivi 拷贝到sjf2410-s 所在的flashvivi 目录下,在开始运行中输入cmd,进入命令行格式,进入flashvivi 目录,运行sjf2410-s 命令,格式如下:sjf2410-s /f:vivi,如图1.5.12所示。图1.5.12 命令行格式一切正常,sjf2410-s 会自动找到CPU 的ID。在此后出现的三次要求输入参数,第一次是选择flash 类型,输入0;第二次是选择Jtag 对flash 的两种功能,输入0;第三次是让选择起始地址,输入0。此后等待大约35 分钟的时间进行烧写,待vivi 烧写完毕后选择参数2,退出烧写,如图1.5.13。图 1.5.13 烧写操作(5)完成vivi 烧写烧录vivi 后关闭2410-S,拔掉JTAG 简易仿真器,连接好串口线,准备烧写vivi,kernel,root注意事项:1)建议在做烧写试验之前将光盘的VER4.0-2005-09-05img 目录拷贝到硬盘上以便于进行烧写;2)上面的烧写流程适用于flash 完全为空或者需要全部重新擦写的情况。当LINUX 系统可以正常启动时,可以使用load flash 命令对任意一个映象文件进行单独烧写;3)如果vivi、kernel、root 之中只有一个出现问题,只需要单独烧写就可以了,不需要从头来一遍。6.4 BusyBox的编译6.4.1 BusyBox简介传统的Linux系统包含的系统命令、函数库等功能强调,但运行开销大,大多数功能都很少用到。BusyBox是传统Linux系统命令、函数库、配置文件的紧凑版本,大小大约100KB,仅由一个可执行文件构成,提供Linux环境下100多个最常用的linux系统命令、工具、http服务器和telnet服务器,可以根据配置,执行bash shell 的功能,以及几十个各种小应用程序的功能。这其中包括有一个迷你的vi编辑器,系统不可或缺的/sbin/init 程序,以及其他诸如sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat . 等一个正常的系统上必不可少的系统命令工具,以及/dev和/etc等目录和配置文件。6.4.2 配置busybox 先下载Busybox,然后采用和linux内核类似的方式配置BusyBox # cp busybox-1.00.tar.gz /babylinux # cd /babylinux # tar xvfz busybox-1.00.tar.gz # cd busybox-1.00 # make menuconfig 其主要配置选项包括:(1)General Configuration 应该选的选项 Show verbose applet usage messages Runtime SUID/SGID configuration via /etc/busybox.conf (2)Build Options Build BusyBox as a static binary (no shared libs) 这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作. (3)Installation Options Dont use /usr 这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接. (4)其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了. (5)配置好后退出并保存. 6.4.3 编译并安装busybox # make # make install 编译好后在busybox目录下生成子目录_install,其内容包括:drwxr-xr-x 2 root root 4096 11月 24 15:28 bin lrwxrwxrwx 1 root root 11 11月 24 15:28 linuxrc - bin/busybox drwxr-xr-x 2 root root 4096 11月 24 15:28 sbin 其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接。6.5 构建嵌入式Linux编译环境6.5.1 交叉编译的概念交叉编译就是,在一种体系结构下的机器上编译出能够在另外一种体系结构下运行的应用程序的编译过程。交叉编译器是通过编译一系列GNU工具及库文件得到的,这些工具包括:n binutils: GNU的一个工具包,其中包括汇编器、连接器、归档器等等一系列工具,名称为ar, as, ld, objdump,n gcc:主要提供C语言编译器,同时还支持其它多种语言n glibc:提供标准的C/C+库, PC Linux的/usr/lib下的各种函数库就是该软件包组成部分.n kernel include files:为建立bootstrap gcc提供内核头文件6.5.2 构建编译环境的整体流程其构建步骤为:1)下载Binutils、gcc、glibc以及内核源代码,和针对该版本的补丁2)通过本机上的gcc编译Binutils,生成汇编器、连接器等编译工具3)编译gcc源码生成bootstrap gcc,用来编译glibc4)使用bootstrap gcc结合glibc和内核源码,便以生成glibc的标准C库5)再次编译gcc源码,生成完整的gcc编译器,包含g+编译器6.5.3 编译环境构建过程(1)下载Binutils、gcc、glibc、内核源代码及相关版本的补丁所有的GNU工具都可以到GNU的官方网站上下载:内核源代码下载地址:/针对ARM体系机构的补丁:.uk/(2)建立工作目录为了使我们的编译结果更清晰,更规范,我们就必须建立一列的工作目录.# pwd /root $ mkdir embedded #总的工作目录$ cd embedded 分别创建编译工具目录、内核源码目录、生成工具链目录$ mkdir build-tools kernel tools $ ls build-tools kernel tools (3)声明环境变量$ export PRJROOT=/root/embedded #编译环境总目录$ export TARGET=arm-linux #嵌入式应用程序的运行环境$ export PREFIX=$PRJROOT/tools #二进制工具所在目录$ export TARGET_PREFIX=$PREFIX/$TARGET#函数库等文件所在目录$ export PATH=$PREFIX/bin:$PATH #二进制工具链所在目录(4)建立build-tools下子目录为了把源码和编译时生成的文件分开,一般的编译工作不在的源码目录中,要另建一个目录来专门用于编译,分别创建编译binutils的目录、编译bootstrap gcc的目录、编译全部gcc的目录、编译glibc的目录、gcc补丁$ cd $PRJROOT/build-tools $ mkdir build-binutils build-boot-gcc build-gcc build-glibc gcc-patch(5)将各个工具包的源代码放置在build-tools 目录下,并解压缩各个工具包$ ls binutils-2.10.1.tar.bz2 build-gcc gcc-patch build-binutils build-glibc glibc-2.2.3.tar.gz build-boot-gcc gcc-2.95.3.tar.gz glibc-linuxthreads-2.2.3.tar.gz(6)配置内核并生成内核头文件(对s3c2410内核,这一步在内核构建一节已经完成,博创提供的内核已经完成该步骤的工作)1)对内核源码下include目录进行修改(s3c2410s的内核源程序已经完成这一步配置)$ cd /root/linux-7.2/develop/s3c2410s/include $ ln -s asm-arm asm $ cd asm $ rm arch proc$ ln -s arch-s3c2410 arch $ ln -s proc-armv proc2)配置内核生成头文件(已经在内核编译部分完成这一步,如果是自己下载的通用内核,则需执行这一步),生成所需的内核头文件$ make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig 3)安装内核头文件到$TARGET_PREFIX目录下$ mkdir -p $TARGET_PREFIX/include $ cp -r $PRJROOT/kernel/linux-2.4.21/include/linux $TARGET_PREFIX/include$ cp r $PRJROOT/kernel/linux-2.4.21/include/asm-arm $TARGET_PREFIX/include/asm(7)编译并安装Binuti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省大连市新民间联盟2024-2025学年初三第六次摸底考试数学试题含解析
- 辽宁省大石桥市重点名校2025年初三联考考试数学试题含解析
- 色达县2025年三下数学期末考试模拟试题含解析
- 江苏宿迁市2024-2025学年下学期高三生物试题(文史类)一模考试试卷含解析
- 浙江水利水电学院《分子与细胞生物学检测技术》2023-2024学年第二学期期末试卷
- 伊春市嘉荫县2025届三下数学期末质量检测试题含解析
- 室内装饰材料员培训
- 如何打造高端大气活动
- 2025购车合同简版格式
- 2025华帝租赁合同
- 防化的相关知识
- 青少年科技创新知识讲座
- 2025山东司法警官职业学院教师招聘考试试题及答案
- 植物地理学课件 苔原(最终版)学习资料
- 水库维修养护实施方案
- 2025中国农业银行个人房屋按揭贷款合同
- 吉林烟草工业有限责任公司招聘真题2024
- 水库运行安全风险评估-全面剖析
- 第二单元 声现象(大单元教学设计)(新教材)2024-2025学年八年级物理上册同步备课系列(人教版2024)
- 美好家园《8未来城市》课件 -2024-2025学年浙人美版(2024)初中美术七年级下册
- 2025年广东科贸职业学院单招职业技能测试题库必考题
评论
0/150
提交评论