- ARM嵌入式系统开发完全入门与主流实践
- 封景刚 吴宝江编著
- 2557字
- 2025-02-17 19:58:36
2.11 实验:编译Linux内核
实验目的:
了解ARM系统内核的编译过程。
实验内容:
完成Linux内核的编译。
预备知识:
熟悉Linux的基本操作。
实验设备:
安装Redhat9的PC,配置好ARM-Linux的开发环境。
实验步骤:
1. 查看内核文件结构
打开Linux下的一个终端,输入:
cd /s3c2410_linux/kernel/
即可进入Linux内核文件所在的目录,然后输入:
ls
此时在屏幕上即可输出Linux内核所包含的文件。
2. 清理以前的编译结果
在打开的终端上输入:
make clean make dep
在按回车键后即可清理掉以前的编译结果。
3. 编译内核
在打开的终端上输入:
make menuconfig /*推荐使用*/
这条命令是用来调用菜单式的配制内核界面的,相应的还有命令行式的配制方法
make config /*不推荐使用*/
在按回车键后即会出现类似于vivi的配置界面的界面,如图2-16所示。

图2-16 Linux内核配置菜单图
下面简单介绍一下各个选项的含义。
(1)Code maturity level options
这个选项的作用域是整个配置空间,如果在这里选中响应的级别,则不符合此条件的选项就不会在后面出现。这个选项是代码的成熟程度的选择,意思是如果你需要一个非常成熟稳定的系统,那么有些新功能就不能使用,并且一个包含有新功能的系统就可能存在相应的风险,可以根据自己的需求选择。进入“Code maturity level options”菜单后的画面如图2-17所示。

图2-17 “Code maturity level options”菜单配置图
(2)Loadable module support
这个选项是你的内核对内核模块的支持选项,包括是否支持和支持的一些配置等,选择此项会使内核文件变大。进入“Loadable module support”后的菜单画面如图2-18所示。

图2-18 “Loadable module support”菜单配置图
(3)System Type
选择对系统的支持,如选择什么样的ARM内核、什么样的配置平台等。实验仪提供的内核是给S3C2410提供的,如果使用不同的处理器系统或是不同的内核,此处的选项可能不同。进入“System Type”后的菜单画面如图2-19所示。

图2-19 “System Type”菜单配置图
(4)General setup
这里是内核本身的一些属性的配置,包括压缩方式、网络支持等很多属性。进入“General setup”后的菜单画面如图2-20所示。

图2-20 “General Setup”菜单配置图
(5)Parallel port support
这个选项顾名思义就是选择内核对并口的支持,当选中对并口支持后会出现新的选项来配置不同类型、不同模式的并口。进入“Parallel port support”后的菜单画面如图2-21所示。

图2-21 “Parallel port support”菜单配置图
(6)Memory Technology Devices (MTD)
这个选项是对MTD设备的支持选项,对嵌入式系统比较重要,内核对各种Flash的支持都在这里配置,包括种类、分区等。进入Memory Technology Devices后的菜单画面如图2-22所示。

图2-22 “Memory Technology Devices”菜单配置图
(7)Plug and Play configuration
内核对即插即用的支持选项,这个选项在嵌入式系统中极少使用。进入“Plug and Play Support”后的菜单画面如图2-23所示。

图2-23 “Plug and Play configuration”菜单配置图
(8)Block device
内核对块设备的支持选项,支持各种磁盘系统。进入“Block device”后的菜单画面如图2-24所示。

图2-24 “Block device”菜单配置图
(9)Multi-device support(RAID and LVM)
内核对多设备的支持选项,主要是对RAID和LVM的支持,这个在嵌入式系统中极少使用。进入“Multi-device support(RAID and LVM)”后的菜单画面如图2-25所示。

图2-25 “Multi-device support(RAID and LVM)”菜单配置图
(10)Networking options
内核的网络支持选项,Linux对网络的支持是内核级的,在这里可以配置对不同网络协议的支持情况。进入“Networking options”后的菜单画面如图2-26所示。

图2-26 “Networking options”菜单配置图
(11)Network device support
内核对网络设备的支持选项,通常对网卡的支持在这里选择,是常用的选项,例如系统在配置不同的网卡时就要在这里选中不同的选项。进入“Network device support”后的菜单画面如图2-27所示。

图2-27 “Network device support”菜单配置图
(12)Amateur Radio support
业余无线电支持选项,在嵌入式系统中极少使用。进入“Amateur Radio support”后的菜单画面如图2-28所示。

图2-28 “Amateur Radio support”菜单配置图
(13)IrDA (infraed) support
IrDA支持选项,就是对红外线通信口的支持。进入“IrDA (infraed) support”后的菜单画面如图2-29所示。

图2-29 “IrDA (infraed)support”菜单配置图
(14)ATA/IDE/MFM/RLL support
对IDE口的支持选项,这里选择支持不同的IDE设备,包括CDPOM、HARDDISK、TAP等。进入“ATA/IDE/MFM/RLL support”后的菜单画面如图2-30所示。

图2-30 “ATA/IDE/MFM/RLL support”菜单配置图
(15)SCSI support
SCSI设备的支持选项,也比较少使用。进入“SCSI support”后的菜单画面如图2-31所示。

图2-31 “SCSI support”菜单配置图
(16)I2O device support
智能IO结构支持,在嵌入式系统中也比较少使用。进入“I2O device support”后的菜单画面如图2-32所示。

图2-32 “I2O device support”菜单配置图
(17)ISDN subsystem
ISDN的支持选项。进入“ISDN subsystem”后的菜单画面如图2-33所示。

图2-33 “ISDN subsystem”菜单配置图
(18)Input core support
输入设备核支持选项,通常当需要支持USAB的HID设备时选中。进入“Input core support”后的菜单画面如图2-34所示。

图2-34 “Input core support”菜单配置图
(19)Character devices
字符型设备的支持选项,这个选项是在嵌入式系统中经常使用的选项,嵌入式系统中大量的设备都属于Char型的设备。进入“Character devices”后的菜单画面如图2-35所示。

图2-35 “Character devices”菜单配置图
(20)Multimedia devices
多媒体设备的支持选项。进入“Multimedia devices”后的菜单画面如图2-36所示。

图2-36 “Multimedia devices”菜单配置图
(21)File systems
内核对不同文件系统的支持选项,在这里选择需要支持的文件系统。进入“File systems”后的菜单画面如图2-37所示。

图2-37 “File systems”菜单配置图
(22)Console drivers
控制台的选择选项,这里主要选择是否把Console定位到VGA上面,以及是否对Frame-Buffer支持。进入“Console drivers”后的菜单画面如图2-38所示。

图2-38 “Console drivers”菜单配置图
(23)Sound
对声音设备的支持选项。进入“Sound”后的菜单画面如图2-39所示。

图2-39 “Sound”菜单配置图
(24)Mutimedia Capabilities Port drivers
多媒体设备的支持选项。进入“Mutimedia Capabilities Port drivers”后的菜单画面如图2-40所示。

图2-40 “Mutimedia Capabilities Port drivers”菜单配置图
(25)USB support
各种USB设备的支持选项。进入“USB support”后的菜单画面如图2-41所示。

图2-41 “support for USB”菜单配置图
(26)Bluetooth support
蓝牙设备的支持选项。进入“Bluetooth support”后的菜单画面如图2-42所示。

图2-42 “Bluetooth Subsystem support”菜单配置图
(27)Kernel backing
内核Debug用的一些选项,用于报告各种信息。进入“Kernel backing”后的菜单画面如图2-43所示。

图2-43 “Kernel backing”菜单配置图
(28)Load and Alternate Configration File
Load不同的配置文件。进入“Load and Alternate Configration File”后的菜单画面如图2-44所示。

图2-44 “Load and Alternate Configration File”菜单配置图
(29)Save Configration to an Alternate File
保存配置文件。进入“Save Configration to an Alternate File”后的菜单画面如图2-45所示。

图2-45 “Save Configration to an Alternate File”菜单配置图
在设置好各选项后选择“Exit”退出和保存就可以了。
4. 生成内核文件
在设置好各选项后退出,输入:
make zImage
zImage文件是通过内核编译后生成的Linux内核文件,按回车键后即会在屏幕上看到其相应的生成过程。
5. 编译模块驱动程序
当内核编译完成后输入:
make modules
即可开始模块驱动程序的编译,凡是在menuconfig中被选为<M>的都会在这条命令运行时被编译。
至此内核的编译已经完成,把生成的zImage文件复制到/tftpboot/目录中备用:
cp ./arch/arm/boot/zImage /tftpboot/ -f
实验小结:
本次实验编译了Linux内核。内核的配置选项很多,本实验仪提供的内核文件已经做好了相应的配置,如果想深入了解内核,还需要很多相关的知识。