Linux内核配置编译与文件系统构建要点.docx
-
资源ID:18999132
资源大小:20.73KB
全文页数:16页
- 资源格式: DOCX
下载积分:10.88金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
Linux内核配置编译与文件系统构建要点.docx
Linux内核配置编译与文件系统构建要点Linux内核配置编译与文件系统构建南京大学黄开成1011800462021.11.11一:实验目的1.了解嵌入式系统的开发环境,内核与文件系统的下载和启动;2.了解Linux内核源代码的目录构造及各自目录的相关内容,了解Linux内核各配置选项内容和作用,把握Linux内核的编译经过;3.了解嵌入式操作系统中文件系统的类型和应用、了解JFFS2文件系统的优点及其在嵌入式系统中的作用、把握利用Busybox软件制作嵌入式文件系统的方法,并且把握嵌入式Linux文件系统的挂载经过。二:实验环境讲明1.PC机使用openSUSE14Enterprise系统。2.开发板使用深圳市武耀博德信息技术有限公司生产的基于Inter的PXA270处理器的多功能嵌入式开发平台EELIOD。3.PC机通过RS-232串口与开发板相连,在PC机终端上运行minicom程序构造一个开发板上的终端,用于对开发板的控制。4.PC机与开发板通过ethernet网络相连接,并可在开发板上通过加载网络文件系统NFS与PC机通信。5.Bootloader能够通过tftp协议从PC机上下载内核镜像和根文件系统镜像。下载目录为/tftpboot。6.用于开发板的Linux内核源码为linux-2.4.21-51Board_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/ttyS0串口线接在PC机的串口1上、bps=115200、8位数据、无校验、无流控制。然后打开开发板电源,看到屏幕有反响之后,按任意键进入配置界面,假如长时间没有按下任何键,bootloader将会自动从flash中读取内核和根文件系统并启动开发板上的Linux系统。分析:嵌入式系统中,通常并没有像PC机中BIOS那样的固件程序,因而整个系统的加载启动任务完全由bootloader来完成。bootloader的主要作用是:初始化硬件设备;建立内存空间的映射图;完成内核的加载,为内核设置启动参数。按0进入命令行形式,出现51board>,能够设置开发板和PC机的IP地址:51board>setmyipaddr192.168.208.133(设置开发板的IP地址)51board>setdestipaddr192.168.208.33设置PC机的IP地址注意IP地址的设置:使其处于同一网段,并且避免和其他系统的IP发生冲突。通过bootloader的主菜单能够完成很多功能,3下载内核,4将内核烧进flash,5下载文件系统,6将文件系统烧进flash,7启动嵌入式操作系统等。51board>tftpzImagekernel(下载内核)51board>tftpramdisk.gzramdisk(下载文件系统)51board>boot(启动系统,进入目的机终端)1.2NFS服务器架设NFS是在不同机器不同操作系统之间进行网络分享文件的服务系统。在嵌入式系统中目的机能够将宿主机的分享文档挂载在本人的系统中,进而,目的机使用宿主机上的远端文件就像是使用本人本地的文件一样,有利于嵌入式开发。#ifconfigeth0192.168.208.133(配置网络)上面的eth0为接口名,eth0表示第一个以太网接口,假如使用其他网络接口,应做相应修改。#mount192.168.208.133:/exp/test-onolock-oproto=tcp(将主机上的exp目录挂载到目的机的test目录上)此时能够对主机上/exp目录下的文件进行操作,就像已经在制作的文件系统里面一样,便于以后开发程序的调试,不必每次都重新烧写文件系统。1.3编写应用程序并在目的机上运行编写简单的c程序hello.c:#includeintmain()printf(“hello,worldn);return0;然后在主机上用穿插编译器进行编译。>/usr/local/arm-linux/bin/arm-linux-gcc-ohellohello.c此外可以以设置好PATH环境变量以方便使用。>exportPATH=/usr/local/arm-linux/bin:$PATH>gcc-ohellohello.c将可执行文件hello复制到分享目录/exp,在目的机上运行hello#./hello显示hello,world1.4归纳总结嵌入式系统下软件开发的一般流程PC机上编写软件代码并用穿插编译环器编译制作内核和文件系统并通过串口完成下载启动内核并借助于NFS文件系统进行程序测试完成调试后,将可执行文件参加文件系统并运行。2.Linux内核配置与编译本实验中用的内核源码是linux-2.4.21-51Board_EDR,在目录/usr/src/linux下。源代码树下有如下目录:arch支持的微处理器体系构造,include头文件,init初始化代码,mm内存管理代码,kernel主要的内核代码,drives所有的设备驱动程序,lib库文件代码,net网络相关代码等。将目的板的开机画面换成本人设定的画面的做法是:将/usr/src/linux目录下的内核源代码拷贝到本人的目录下,进入这个目录,在arch/arm下找到开发板启动画面的文件,将其删除,用本人的图画替换。有两个小的注意事项是目的板只是别.ppm文件,所以需要改变原来图画的文件格式,可直接改文件后缀名,或者在终端中用命令convert。且图画的文件名必须为linux_logo。>convertlinux_logo.jpglinux_logo.ppm2.1内核配置编译的基本流程在文件夹linux-2.4.21-51Board_EDR打开终端。>makemenuconfig(进入内核配置菜单)根据需要对内核配置项进行选择。配置变量有四种选择:y静态编译进内核,m内核代码被编译成模块,n表示不编译进内核,表示配置变量的值为空。按空格键能够切换着几种选择。下面针对一些比拟重要的内核配置项进行讲明:1.Loadablemodulesupport,将不常用的设备模块化,动态地加载。这样能愈加有效利用内存。所以最好选中。2.Systemtype,处理器种类。本实验选中“PXA270/210-based>“XSBase270-EDR。3.在Networkdevicesupport,网络设备驱动。选择对应的网卡。本实验箱的网卡是“Ethernet10Mor100Mbit“SMSCLAN91C111。4.Consoledrivers,终端设备驱动配置。为了以后实验中要用到的支持图像的功能,要选择“supportforframebufferdevices和“PXALCDsupport。5.在“Generalsetup->Defaultkernelcommandstring中设定内核启动时的一些参数,在使用ramdisk文件系统时该选项的值为root=/dev/ram0rwconsole=ttyS0,115200mem=64M其中root=/dev/ram0表明使用的是randisk,rw表明可读可写,console=ttyS0,115200表明使用串行终端,波特率为115200,mem=64M指定内存大小。6.由于使用randisk的情况需要内核的支持,故需要将“Blockdevices->RAMdisksupport编入内核,此外将“Blockdevices->DefaultRAMdisksize(kbytes)改为8192,由于后续的ramdisk根文件系统将使用8MB大小。7.在“Multimediacapabilitiesportdrivers->UCB1400TouchscreensupportonthexsBase270Board->GUItobesupported选中“Qtopia。这是由于在使用LCD时将能使屏幕持续亮大约特别钟而不睡眠。上面的这些配置很重要,其余的配置见讲义P20。配置完之后选择保存,执行完之后会生成.config文件。然后执行>makeclean(去除以前构核经过中生成的目的文件、模块文件、核心和一些临时文件)>makedep(建立依靠关系)>make(将生成核心vmlinux)>makezImage生成的压缩内核映像文件zImage在arch/arm/boot目录中。将生成的内核映像文件拷贝到/tftpboot下,以便开发板下载。在反复地编译启动经过中还需要把握一些小技巧来帮助加快开发进程,比方在配置选项结束的时候能够“SaveConfigurationtoanAlternateFile,此时能够方便在下一次修改的时候能够“LoadanAlternateConfigurationFile来读取上一次的配置,避免一些错误的修改。2.2总结内核映像文件的生成方法及其对操作系统的作用。makemenuconfigmakecleanmakedepmakemakezImage内核文件是操作系统的核心,负责系统的进程管理,内存管理,设备和文件管理等,决定着系统的性能和稳定性。2.3内核配置中哪些选项对操作系统的正常启动是必须的。Systemtype(系列选型);Characterdevices(字符设备驱动)中的Virtualterminal,supportforconsoleonserialsupport,supportforconsoleonvirtualterminal;文件系统FileSystem。3.嵌入式文件系统的构建3.1根文件系统概述根文件系统是内核启动时所mount的第一个文件系统,内核代码映像文件保存在跟文件系统中,而系统引导程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务加载到内存中运行。根文件系统中常见目录有:/bin存放二进制可执行命令的目录/sbin存放管理系统管理员使用的管理程序的目录以上由busybox生成/dev存放设备文件的目录/etc存放系统管理和配置文件的目录/usr存放几乎所有的要用到的应用程序和文件/lib存放动态链接分享库的目录/mnt使用户临时挂载其他的文件系统/proc虚拟文件系统,直接访问这个目录获取系统信息以上是需要建立的目录/tmp公用的临时文件存储点/root存放管理员的主目录/var某些大文件的溢出区3.2Busybox简单介绍和编译BusyBox是标准Linux工具的一个单个可执行实现。BusyBox包含了一些简单的工具,例如cat和echo,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。它集成压缩了Linux的很多工具和命令。由于代码能够在不依靠分享库的情况下而直接分享,BusyBox的体积得以大幅缩小。本次实验使用的Busybox版本是busybox-1.00-pre5。进入目录,打开终端。>makemenuconfig进入配置界面下面扼要对Busybox的配置作一些讲明:1.在BuildOption菜单下,选择静态库编译方式,这样不用为Busybox提供动态链接库支持。2.设置穿插编译器的途径,在crosscompilerprefix中输入/usr/local/arm-linux/bin/arm-linux-3.在InstallationOption菜单下,自定义安装目录,一般使用默认目录./_install即可。4.在LinuxSystemUtilities中有一些重要组件,如mount、umount。因而要选上SupportmountingNFSfilesystems,即支持加载网络文件系统,假如不选此项,则影响与PC机的通信。5.在NetworkingUtilities菜单下配置和网络有关的命令,为了使用网络连接,其中ping和ifconfig必选。配置好busybox之后保存退出。进行编译安装。>make>makeinstall在生成的_install目录里面有bin、sbin和usr三个目录,并且每个目录下都会有busybox可执行文件的符号链接。3.3配置文件系统1.在_install目录下创立etc目录,并建立inittab、rc、motd三个文件。inittab文件由系统启动程序init读取并解释执行。>chmod+xrc(修改属性为可执行)Motd内容随意,由/etc/rc调用显示在终端上。在etc目录下创立init.d目录,并将/etc/rc向/etc/init.d/rcS做符号链接,此文件为inittab指定的启动脚本。>mkdirinit.d>cdinit.d>lns./rcrcS初始化脚本,系统执行/sbin/init,默认情况下它会执行/etc/init.d/rcS来进行系统的初始化,建立链接后,实际执行的为/etc/rc,在rc程序中有调用/etc/motd文件,因而motd文件的内容最终显示在终端上。2.创立dev目录,并在该目录下建立必要的设备。如终端设备,dsp,声卡,framebuffer帧缓冲,硬盘hda,鼠标,键盘,ram,触摸屏等。详细见讲义P26。3.建立proc空目录,供proc文件系统使用。4.建立lib目录将穿插编译器链接库途径usr/local/arm-linux/arm-linux/lib。然后将下面几个库复制到lib目录:ld-2.3.2.solibc-2.3.2.solibm-2.3.2.so再做如下软链接:lnsld-2.3.2.sold-linux.so.2lnslibc-2.3.2.solibc.so.6lnslibm.so.6libm-2.3.2.solnslibm.solibm-2.3.2.so分析:实验中要用静态链接的方式来运行应用程序,并且实验中要将这些库安装在/lib目录下。本实验中安装了三个库ld-2.3.2.so,libc-2.3.2.so,libm-2.3.2.so。它们分别是linux的动态加载器、libc标准的c库函数和数学库。实验中还做了四个软链接,这些软链接使其不受版本的影响,进而具有向后兼容的作用,所有的linux版本都能使用这些分享库。至此,文件系统目录构造完毕。在busybox目录终端下:>ddif=/dev/zeroof=ramdisk_imgbs=1kcount=8912>/sbin/mke2fsramdisk_img>mountramdisk_img-oloop分析:第一条命令是将创立一个写满'0'文件,bs=1kcount=8192表明创立的文件大小是8192x1k=8M。第二条命令用于构建e2fs文件系统。第三条命令用于将ramdisk_img默认挂载到/mnt/ramdisk目录,-oloop中的-o意为option,loop表明挂载的是loopback设备。然后将配置好的跟文件系统目录即_install中的内容全部复制到/mnt/ramdisk/目录下。此时碰到问题:由于一开场没有摸清设备文件与普通文件的区别,于是在将挂载文件系统前所建立的设备文件拷贝到已挂载ramdisk的