Linux 内核编译上机实验文档格式.docx
《Linux 内核编译上机实验文档格式.docx》由会员分享,可在线阅读,更多相关《Linux 内核编译上机实验文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
1、装有虚拟机(VMwareWorkstation)和嵌入式Linux系统(RedHat9)的PC机一台;
2、XSBase270实验开发平台一套;
进度
本次共有1个练习,完成1个。
内容
实验原理:
1.内核编译:
内核是操作系统的核心组件,他负责为程序员编写应用程序分配所需要的计算机资源。
内核在程序员编写的应用程序和硬件之间扮演一个协调者的角色。
负责为同时运行的程序分配资源和管理程序所需要的内存空间。
准确点说,是为运行进程和线程分配必要的资源。
编译是使用一个编译器将源代码编译为一个二进制可执行文件过程。
Linux的源代码主要是由C代码和一些汇编代码组成。
2.内核源代码目录、
(1)arch
arch子目录包括所有与体系结构相关的内核代码,它的每一个子目录都代表一个支持的体系结构。
例如:
arm下面就是arm体系架构的处理器目录,包含我们使用的PXA处理器。
(2)Include
include子目录包括编译内核所需要的大部分头文件。
与ARM相关的头文件在include/asm-arm子目录下。
(3)init
这个目录包含内核的初始化代码但不是系统的引导代码,包含main.c和Version.c文件。
(4)mm
包含所有独立于CPU体系结构的内存管理代码。
(5)Kernel
包括主要的内核代码
(6)Drives
此目录用于放置系统所有的设备驱动程序,每种驱动程序个占一个子目录
/char:
字符设备驱动程序。
如串口、鼠标等。
/cdrom:
包含Linux所有的CD-ROM代码。
/pci:
PCI卡驱动程序代码,包含PCI子系统映射和初始化代码等。
scsi:
包含所有的SCSI代码已经Linux所支持的所有的SCSI设备驱动程序代码。
net:
网络设备驱动程序。
sound:
声卡设备驱动程序。
实验内容:
(1)makemrproper:
删除所有以前在构核过程所产生的所有文件;
(2)makemenuconfig:
内核配置;
(3)makedep:
寻找依存关系;
(4)makezImage:
产生压缩的核心映像文件,内核编译完毕之后,生成zImage内核映像文件保存在源代码的arch/arm/boot/目录下。
实验步骤:
1.计算机搭建好相关环境,如图1
虚拟机安装好虚拟工具设置好相关共享,以虚拟linux系统共享windows资源,并将目录设置为/mnt/hgfs/linux。
并将开发光盘中Kernel下的linux-2.4.21-51Board_EDR.tar.gz放到共享文件夹中。
如图1
图1
2.将linux-2.4.21-51Board_EDR.tar.gz解压,并将交叉编译工具安装在/opt/xscalev1/bin下,如图2~4
图2~4
3.内核配置项介绍,如图5
首先切换linux源代码所在的目录,并终端输入makemenuconfig,系统弹出基于Mcurses内核配置图形界面,便可进行内核选项的配置
图5
4.配置选项的含义
在有"
---->
"
标志的地方按回车键可到下面的菜单。
按两次<
ESC>
或选择<
Exit>
则到上面的菜单;
按“h”键或选择下面的<
Help>
则可看到帮助;
按<
Tab>
键则在控制(control)之间移动;
Y表示包含在kernel中,N表示除外,M表示模块。
设置状态在[]或<
>
中以“*“(选择),“M“(模块),空格(除外)来表示
(1)Codematurityleveloptions——>
[*]Promprtfordevelopmentand/orincompleteCode/drivers->
选择kernel代码的成熟度的部分,帮助选择开发版本层次的程序,此项体温是否将arpha版本包含kernel中。
如图6
图6
(2)Loadablemodulesupport——>
[*]EnableLoadablemoduLeSupport
->
利用模块可将不常用的设备驱动或功能作为模块放在内核外部,必要动态地调用。
操作结束后从内存中删除,这样可以有效地使用内存,同时也可减小了内核的大小。
模块可以自行编译并具有独立的功能,即使需要改变模块的功能,也不用对整个内核进行修改。
文件系统,设备驱动,二进制格式等很多功能都支持模块。
一定要选择[*]。
[]SetversioninformationonallSymbolsformodules
利用这个功能能够让内核使用其它内核版本模块或没有包含在此kernel的特殊的模块。
一般选择[N]。
[*]KernelmoduleLoader
这个设置使kernel对模块处于常备状态。
在不使用Insmod或rmmod命令情况下,kernel程序自动将需要执行的模块调用到内存中,一定时间内不使用该模块时自动将其从内存删除一般要选择[*]。
如图7
图7
(3)SystemType——>
(PXA270/210-based)ARMsystemtyp
—>
系统格式中按照EELIOD的CPU格式选PXA270/210-based。
如图8
。
图8
(4)、Generalsetup——>
网络,总线协议,节电功能等影响整个系统的设置。
如图9
图9
(5)、MemoryTechnologyDevices(MTD)——>
在嵌入式设备中为了组成固态文件系统(solidstatefilesystem,即不旋转的,没有磁盘的)而需要的闪存,RAM,和其它类似的芯片组等存储装置。
如图10
图10
RAM/ROM/Flashchipdrivers——>
如图11
图11
Mappingdriversforchipaccess-->
如图12
图12
(6)Blockdevices——>
针对硬盘,CDROM等以block为单位进行操作的存储装置(blockdevice)选项。
<
M>
Loopbackdevicesupport
使一个文件能够被认为一个文件系统。
例如,软盘的image文件或拷贝CD-ROM的文件,可被认为一个文件系统,因而可以查看其内容。
如图13
图13
(7)Networkingoptions——>
[*]PacketSocket
与tcpdump(检查包的头部,按条件打印其内容)类似,在没有媒介协议而直接与网络设备通信的应用上使用。
[*]Packetsocket:
mmappedIO
(激活此选项可使包协议驱动(packetprotocoldriver)支持更快速的IO机制。
[*]Socketfiltering
[*]UnixdomainSockets
[*]TCP/IPnetworking
(此功能使Linux系统成为TCP/IP网络。
TCP/IP是区域网络及互联网标准协议,不经过互联网的Standalone电脑也需要TCP/IP,因为Term和XWindow等程序也使用TCP/IP协议。
[*]IP:
kerneLLeveLautoconfiguration:
DHCPSupport
BOOTPSupport
RARPSupport
(客户系统(clientsystem)启动从DHCP或BOOTP服务器索取网络设置信息的功能。
用于启动没有磁盘的系统中,"
通过NFS的根文件系统(rootfilesystem)"
项也要选择[Y]。
如图14
图14
(8)Networkdevicesupport——>
[*]Networkdevicesupport
如果用户的计算机连接到网络上,或者想使用SLIP或PPP的候选择。
Ethernet(10or100Mbit)
[*]SMSCLAN91C111supportforEELiodBoard
支持EELIODEthernet卡中LAN91C111。
如图15
图15
(9)IrDA(infrared)support——>
(9)Characterdevice9
支持终端,视频适配器,鼠标,打印机等以文字为单位进行操作的设备。
[*]VirtuaLterminaL
一个物理终端上可执行多个虚拟终端。
虚拟终端可支持多个Xsession,也可同时使用多个显示器。
EELIOD板可支持两个,Minicom和lcd。
[*]SupportforconsoleonvirtuaLterminal
系统console接收所有kernel信息和警告信息,允许以单独用户(singleuser)模式登录。
[*]Standard/generic(dumb)SeriaLSupport
适用Modem和串行鼠标,串行设备的功能。
[*]Supportforconsoleonserialport
可将串口用作console。
(系统console是接收并打印kernel信息和警告信息,允许以单独用户模式登录的设备)也可用串口打印机等纪录各个信息。
即使在这里设置[Y],但如果不调整kernel参数,则/dev/tty0仍然占用着系统console。
参考"
manbootparam"
或bootloader文件可查到bootloader(lilo或loadlin)启动的时候应选用哪些选项。
利用这个选项可运行没有VGA卡的linux系统,kernel自动将/dev/ttyS0设为系统console。
即使没有直接连接到linuxbox的显示器,视频卡,键盘等,也可以在用串行线连接的其他终端上控制系统。
这个功能常用倒利用linux的路由器,共享机等网络设备。
[*]Unix98PTYSupport
PTY是由软件驱动的虚拟设备(pseudoterminal)。
由master和slave两个部分组成,与物理终端的操作完全相同,slave模拟终端机。
Master设备从slave读入数据或写入slave。
典型的masterside程序是telnet服务器或xterm。
如图16
图16
(10)Filesystems——>
这是对linux可接近的各个文件系统的设置。
所有的操作系统都具有固有的文件系统格式。
一般为了对不同操作系统的文件系统进行读写操作需安装特殊的应用程序。
但是在Linux可以同Kernel模块完成这些操作。
[*]KerneLautomounterSupport
automounter是根据要求对远程文件系统自动进行mount的一种工具。
BSD的amd完全是用户空间的demon,但Linux的automounter在文件系统已经被mount的情况下为了减少overhead而部分地依赖于kernel。
如果使用这个功能则"
NFSfiLeSyStemSupport"
也被激活。
[*]Kernelautomounterversion4support(alsosupportsv3)
如果用户的系统没有连接到大的分散网络,或者不是需要动态再设置的laptop之一的话,可能不需要automounter,在这里选择[N]即可。
如图17
图17
(11)Consoledrivers——>
Frame-buffersupport--->
[*]Supportforframebufferdevices(EXPERIMENTAL)
[*]PXALCDsupport
为了在Console中能够使用图像功能而支持的功能。
设置不妥会造成显示器或视频卡的损伤。
如果不确定就选择[N]。
Framebuffer为用户提供等同地接近linux支持的各种硬件种类
的环境,其应用程序的制作简单,移植性强。
为了完整地使用Framebuffer的所有功能,需要一个fbset的utility程序。
EELiod支持PXALCD。
如图18。
图18
(12)Sound——>
(13)保存,如图19
图19
(14)生成内核镜像文件zImage,如图20
图20
5
总结
通过本次linux上机实验,我成功的完成了嵌入式linux系统内核的编译实验,并将自己开发的内核代码添加到Linux,认识了Linux内核的配置选项,在实验中得到了不小的收获。
1、实验体会和收获
认识了linux内核的结构,并了解了linux内核内核配置界面的使用方法:
(1)在菜单方式的配置界面上可用上下方向键来在各自菜单之间移动。
(2)在标有"
——>
标志的地方按回车键进入下级菜单
(3)按两次<
则返回到上级菜单
(4)按"
h"
键或选择下面的<
则可看到配置帮助信息
(5)按<
键则在各控制选项之间移动
(6)按Y表示包含该功能选项配置在内核中,M表示以模块的方式编译到内核中,N表示该功能选项不进行编译
(7)设置状态在[]或<
中以"
*"
(选择),"
M"
(模块),空格(除外)来表示。
这是第一次成功将自己开发的内核代码添加到Linux,反复熟练要领,在同组同学的配合下,完成了实验要求,也为日后对完成嵌入式linux文件系统的搭建实验,做下铺垫。
教师
评语