版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux 内核配置编译与文件系统构建 南京大学 黄开成 101180046 2012.11.11 一:实验目的 1. 了解嵌入式系统的开发环境,内核与文件系统的下载和启动; 2. 了解 Linux 内核源代码的目录结构及各自目录的相关内容,了解 Linux 内核各配置选项内容和作用,掌握 Linux 内核的编译过程; 3. 了解嵌入式操作系统中文件系统的类型和应用、了解JFFS2文件系 统的优点及其在嵌入式系统中的作用、 掌握利用Busybox软件制作嵌 入式文件系统的方法,并且掌握嵌入式 Linux 文件系统的挂载过程。 二:实验环境说明 1. PC 机使用 openSUSE 14 Ent
2、erprise 系统。 2. 开发板使用深圳市武耀博德信息技术有限公司生产的基于 Inter 的PXA27C处理器的多功能嵌入式开发平台 EELIOD 3. PC机通过RS-232串口与开发板相连,在PC机终端上运行minicom 程序构造一个开发板上的终端,用于对开发板的控制。 4. PC机与开发板通过ethernet网络相连接,并可在开发板上通过加 载网络文件系统(NFS与PC机通信。 5. Bootloader可以通过tftp 协议从PC机上下载内核镜像和根文件 系统镜像。下载目录为 /tftpboot 。 6. 用于开发板的 Linux 内核源码为 linux-2.4.21-51Boa
3、rd_EDR busybox 版本为 busybox-1.00-pre5 。 7. 交叉编译器的路径为 /usr/local/arm-linux/bin/arm-linux 三:实验操作过程和分析记录 1. 嵌入式系统的开发环境和开发流程: 1.1 启动 minicom 和开发板 在PC机上打开一个终端,输入: minicom 按 Ctrl+A-o 进入 minicom 的 configuration 界面。对串行通信接口 进行配置,串口设置为:/dev/ttySO (串口线接在PC机的串口 1上)、 bps=115200、8 位数据、无校验、无流控制。 然后打开开发板电源, 看到屏幕有反应之
4、后, 按任意键进入配置界面, 如果长时间没有按下任何键, bootloader 将会自动从 flash 中读取 内核和根文件系统并启动开发板上的 Linux 系统。 分析:嵌入式系统中,通常并没有像PC机中BIOS那样的固件程序, 因此整个系统的加载启动任务完全由 bootloader 来完成。 bootloader 的主要作用是:初始化硬件设备;建立内存空间的映射 图;完成内核的加载,为内核设置启动参数。 按0进入命令行模式,出现51board,可以设置开发板和PC机的IP 地址: 51board set myipaddr 33 ( 设置开发板的 IP 地址) 51
5、board set destipaddr 3 (设置 PC机的 IP 地址) 注意 IP 地址的设置:使其处于同一网段,并且避免和其他系统的 IP 发生冲突 通过 bootloader 的主菜单可以完成很多功能, 3下载内核, 4 将内核烧进 flash , 5下载文件系统, 6将文件系统烧进 flash , 7启动嵌入式操作系统等。 51board tftp zImage kernel ( 下载内核 ) 51board tftp ramdisk.gz ramdisk( 下载文件系统 ) 51board boot ( 启动系统,进入目标机终端 ) 1.2 NFS 服务
6、器架设 NFS 是在不同机器不同操作系统之间进行网络共享文件的服务系 统。在嵌入式系统中目标机可以将宿主机的共享文档挂载在自己的系 统中,从而,目标机使用宿主机上的远端文件就像是使用自己本地的 文件一样,有利于嵌入式开发。 # ifconfig eth0 33( 配置网络 ) 上面的 eth0 为接口名, eth0 表示第一个以太网接口,如果使用其他 网络接口,应做相应修改。 # mount 33:/exp /test -o nolock -o proto=tcp ( 将 主机上的 exp 目录挂载到目标机的 test 目录上) 此时可以对主
7、机上尼xp目录下的文件进行操作,就像已经在制作的文 件系统里面一样, 便于以后开发程序的调试, 不必每次都重新烧写文 件系统。 1.3 编写应用程序并在目标机上运行 编写简单的 c 程序 hello.c : #include int main() printf( “ hello,worldn ”); return 0; 然后在主机上用交叉编译器进行编译。 /usr/local/arm-linux/bin/arm-linux-gcc-o hello hello.c 此外也可以设置好PATH环境变量以方便使用。 export PATH=/usr/local/arm-linux/bin:$PATH
8、gcc -o hello hello.c 将可执行文件 hello 复制到共享目录 /exp, 在目标机上运行 hello #./hello 显示 hello , world 1.4 归纳总结嵌入式系统下软件开发的一般流程 PC 机上编写软件代码并用交叉编译环器编译制作内核和文件 系统并通过串口完成下载启动内核并借助于 NFS 文件系统进行 程序测试完成调试后,将可执行文件加入文件系统并运行。 2. Linux 内核配置与编译 本实验中用的内核源码是 linux-2.4.21-51Board_EDR ,在目录 /usr/src/linux 下。源代码树下有如下目录: arch (支持的微处理
9、器体系结构),in elude (头文件),init (初始化代码),mm (内存管 理代码) ,kernel (主要的内核代码) ,drives (所有的设备驱动程 序) ,lib (库文件代码) ,net (网络相关代码)等。 将目标板的开机画面换成自己设定的画面的做法是:将 /usr/src/linux 目录下的内核源代码拷贝到自己的目录下,进入这 个目录,在 arch/arm 下找到开发板启动画面的文件,将其删除,用 自己的图画替换。有两个小的注意事项是目标板只是别 .ppm 文件, 所以需要改变原来图画的文件格式, 可直接改文件后缀名, 或者在终 端中用命令 convert 。且图画
10、的文件名必须为 linux_logo 。 convert linux_logo.jpg linux_logo.ppm 2.1 内核配置编译的基本流程 在文件夹 linux-2.4.21-51Board_EDR 打开终端。 make menuconfig( 进入内核配置菜单 ) 根据需要对内核配置项进行选择。配置变量有四种选择:y 静 态编译进内核,m内核代码被编译成模块,n表示不编译进 内核,表示配置变量的值为空。按空格键可以切换着几种 选择。下面针对一些比较重要的内核配置项进行说明: 1. Loadable module support ,将不常用的设备模块化,动态地加载。 这样能更加有效利
11、用内存。所以最好选中。 2.System type ,处理器种类。本实验选中“PXA270/210-based” “ XSBase270-EDR”。 3. 在 Network device support, 网络设备驱动。选择对应的网卡。本 实验箱的网卡是“ Ethernet 10M or 100Mbit ”“ SMSC LAN91C1”11。 4. Console drivers,终端设备驱动配置。为了以后实验中要用到的 支持图像的功能,要选择“ support for framebuffer devices ”和 “PXA LCD support ”。 5. 在“ General setu
12、p -Default kernel command string ”中设定 内核启动时的一些参数,在使用 ramdisk 文件系统时该选项的值为 root=/dev/ram0 rw console=ttyS0,115200 mem=64M 其中 root=/dev/ram0 表明使用的是 randisk , rw 表明可读可写, console=ttyS0,115200 表明使用串行终端,波特率为115200, mem=64指定内存大小。 6. 由于使用ran disk的情况需要内核的支持,故需要将“Block devices-RAM disk support ” 编入内核,此外将 “ Blo
13、ck devices-Default RAM disk size (kbytes) ”改为 8192,因为后续 的ramdisk根文件系统将使用8MB大小。 7. 在 “ Multimedia capabilities port drivers-UCB 1400 Touchscreen support on the xsBase 270 Board-GUI to be supported ”选中“Qtopia ”。这是因为在使用LCD寸将能使屏幕持续 亮大约十分钟而不睡眠。 上面的这些配置很重要,其余的配置见讲义P20。 配置完之后选择保存,执行完之后会生成 .config 文件。然后执行 m
14、ak6clea n(清除以前构核过程中生成的目标文件、模块文件、核心 和一些临寸文件 ) make dep( 建立依赖关系 ) make( 将生成核心 vmlinux) make zImage 生成的压缩内核映像文件 zImage 在 arch/arm/boot 目录中。 将生成的内核映像文件拷贝到 /tftpboot 下,以便开发板下载。 在反复地编译启动过程中还需要掌握一些小技巧来帮助加快开发 进程,比如在配置选项结束的时候可以“ Save Configuration to an Alternate File ”,此时可以方便在下一次修改的时候可以“ Load an Alternate C
15、onfiguration File ”来读取上一次的配置,避免一些错 误的修改。 2.2 总结内核映像文件的生成方法及其对操作系统的作用。 make menuconfig make clean make dep make make zImage 内核文件是操作系统的核心,负责系统的进程管理,内存管理,设备 和文件管理等,决定着系统的性能和稳定性。 2.3 内核配置中哪些选项对操作系统的正常启动是必须的。 System type ( 系列选型 ) ;Character devices( 字符设备驱动 )中的 Virtual terminal,support for console on seri
16、al support,support for console on virtual terminal;文件系统( File System )。 3. 嵌入式文件系统的构建 3.1 根文件系统概述 根文件系统是内核启动时所mou nt的第一个文件系统,内核代码映 像文件保存在跟文件系统中, 而系统引导程序会在根文件系统挂载之 后从中把一些基本的初始化脚本和服务加载到内存中运行。 根文件系统中常见目录有: /bin 存放二进制可执行命令的目录 /sbin 存放管理系统管理员使用的管理程序的目录 以上由 busybox 生成 /dev 存放设备文件的目录 /etc 存放系统管理和配置文件的目录 /u
17、sr 存放几乎所有的要用到的应用程序和文件 /lib 存放动态链接共享库的目录 /mnt 使用户临时挂载其他的文件系统 /proc 虚拟文件系统,直接访问这个目录获取系统信息 以上是需要建立的目录 /tmp 公用的临时文件存储点 /root 存放管理员的主目录 /var 某些大文件的溢出区 3.2 Busybox 简单介绍和编译 BusyBox 是标准 Linux 工具的一个单个可执行实现。 BusyBox 包 含了一些简单的工具,例如 cat和echo,还包含了一些更大、更复 杂的工具,例如grep、find、mou nt以及tel net。它集成压缩了 Li nux 的许多工具和命令。 因
18、为代码可以在不依赖共享库的情况下而直接共 享,BusyBox的体积得以大幅缩小。 本次实验使用的 Busybox版本是busybox-1.00-pre5。进入目录, 打开终端。 make menuconfig (进入配置界面) 下面简要对 Busybox 的配置作一些说明: 1. 在 Build Option 菜单下,选择静态库编译方式, 这样不用为 Busybox 提供动态链接库支持。 2. 设 置交叉 编译 器的 路 径, 在 cross compiler prefix 中输入 /usr/local/arm-linux/bin/arm-linux- 3. 在 Installation Op
19、tion菜单下, 自定义安装目录,一般使用默认 目录 ./_install 即可。 4. 在 Linux System Utilities中有一些重要组件, 如 mount、umount。 因此要选上 Support mounting NFS file systems,即支持加载网络 文件系统,如果不选此项,则影响与 PC机的通信。 5. 在 Networking Utilities菜单下配置和网络有关的命令,为了使 用网络连接,其中 ping 和 ifconfig 必选。 配置好 busybox 之后保存退出。进行编译安装。 make make install 在生成的 _install 目
20、录里面有 bin 、 sbin 和 usr 三个目录,并且每 个目录下都会有 busybox 可执行文件的符号链接。 3.3 配置文件系统 1. 在_install目录下仓U建 etc 目录,并建立 inittab 、rc、motd 三个文件。 inittab 文件由系统启动程序 init 读取并解释执行。 chmod +x rc ( 修改属性为可执行 ) Motd 内容随意,由 /etc/rc 调用显示在终端上。 在 etc 目录下创建 init.d 目录,并将 /etc/rc 向 /etc/init.d/rcS 做符号链接,此文件为 inittab 指定的启动脚本。 mkdir init.
21、d cd init.d ln - s ./rc rcS 初始化脚本,系统执行 /sbin/init ,默认情况下它会执行 /etc/init.d/rcS 来进行系统的初始化,建立链接后,实际执行的为 /etc/rc ,在 rc 程序中有调用 /etc/motd 文件,因此 motd 文件的内 容最终显示在终端上。 2. 创建 dev 目录,并在该目录下建立必要的设备。如终端设备, dsp, 声卡,frame buffer 帧缓冲,硬盘(hda),鼠标,键盘,ram, 触 摸屏等。具体见讲义 P26。 3. 建立 proc 空目录,供 proc 文件系统使用。 4. 建 立 lib 目 录 将
22、交 叉 编 译 器 链 接 库 路 径 usr/local/arm-linux/arm-linux/lib 。 然后将下面几个库复制到 lib 目录: ld-2.3.2.so libc-2.3.2.so libm-2.3.2.so 再做如下软链接: ln - s ld-2.3.2.so ld-linux.so.2 In s libc-2.3.2.so libc.so.6 In - s libm.so.6 libm-2.3.2.so In - s libm.so libm-2.3.2.so 分析:实验中要用静态链接的方式来运行应用程序, 并且实验中要 将这些库安装在/lib 目录下。本实验中安装
23、了三个库 ld-2.3.2.so,libc-2.3.2.so,libm-2.3.2.so。它们分别是 linux 的 动态加载器、 libc 标准的 c 库函数和数学库。实验中还做了四个软 链接,这些软链接使其不受版本的影响,从而具有向后兼容的作用, 所有的 linux 版本都能使用这些共享库。 至此,文件系统目录构造完毕。 在 busybox 目录终端下: dd if=/dev/zero of=ramdisk_img bs=1k count=8912 /sbin/mke2fs ramdisk_img mount ramdisk_img -o loop 分析:第一条命令是将创建一个写满0 文件
24、,bs=1k count=8192 表明创建的文件大小是8192x1k=8M。第二条命令用 于构建 e2fs 文件系统。 第三条命令用于将 ramdisk_img 默认挂载 至U/mnt/ramdisk目录,-o loop 中的-o 意为 option , loop 表明 挂载的是 loopback 设备。 然后将配置好的跟文件系统目录(即 _install )中的内容全部 复制至 /mnt/ramdisk/ 目录下。 此时遇至问题:由于一开始没有摸清设备文件与普通文件的区别, 于是在将挂载文件系统前所建立的设备文件拷贝至已挂载 ramdisk 的 dev目录时发现根本无法复制。之后找到了解决办法,就是在挂载的 文件系统里面再次输入一串的mkno(来建立设备。 umount /mnt/ramdisk (文件复制创建完毕后卸载文件系统) gzip ramdisk_img(压缩映像文件生成 ramdisk_img.gz ) 在挂载与卸载过程中还遇到由于没有遵循“一挂一卸”的原则 导致多次挂载后不能卸载。loop设备有loopO Ioop7,所以当挂载 次数过多会
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度教育机构聘用兼职讲师合同书3篇
- 2025年度农村个人房屋买卖协议书(含农业物联网技术应用)3篇
- 二零二五年度农产品收购加工一体化合同范本3篇
- 二零二五年度户外广告牌使用权租赁协议2篇
- 二零二五年度公司员工股权激励合伙协议3篇
- 2025年度新能源公司股权转让及技术合作合同3篇
- 二零二五年度石油化工机械维修保障协议2篇
- 二零二五年度全屋衣柜定制与售后保障服务合同3篇
- 2025年度生猪养殖与农业保险产品开发合作协议2篇
- 2025年度离婚后双方情感修复及沟通协议3篇
- 草地调查规划学知到智慧树章节测试课后答案2024年秋东北农业大学
- 2024年矿产资源开发咨询服务合同
- 上海市2024-2025学年高一语文下学期期末试题含解析
- 建筑物拆除的拆除工厂考核试卷
- 广东省深圳市2023-2024学年高二上学期期末测试英语试卷(含答案)
- 乘风化麟 蛇我其谁 2025XX集团年终总结暨颁奖盛典
- 人教版一年级数学2024版上册期末测评(提优卷一)(含答案)
- 医疗护理员理论知识考核试题题库及答案
- 湖北省荆州市八县市区2023-2024学年高二上学期1月期末联考数学试题 附答案
- 2024年人教版八年级历史下册期末考试卷(附答案)
- Python语言基础与应用学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论