定制属于自己的 linux 内核(Step 2)

在上次的话题中我们通过安装引导MBR与移植主要二进制文件(bash),完成了

最基础的linux内核定制初步的工作,至此我们也可以总结一下linux的启动流程

为接下来的更为自助化的定制打下基础.

用一张图来关注一下流程:

用一张表来了解一下每个方块的作用

我们接下来的步骤将会围绕这两幅图来展开, 我们将会以宿主机添加磁盘定制

之后实验机装载磁盘的方式进行测试工作

1. 整理磁盘分区操作

# 此段遵循 上一篇文章 前 (8 步的操作

# 安装grub文件

grub-install root-directory=/mnt /dev/sdb

# 编写grub.conf文件

default=0timeout=5title “Mini Linux”root (hd0,0)kernel /bzImage ro root=/dev/sda2 init=/sbin/init

2. 编译内核

# 下载内核源码 请 内核下载

tar xf linux-3.13.6.tar.xz -C /usr/srccd /usr/src# 创建链接ln -sv linux-3.13.6 linuxcd linux# 安装开发包组yum groupinstall “Development Tools”make allnoconfigmake menuconfig

# 进入到内核选择将所有项编译进内核,符号 * , 选项如下, 缩进即为选项的层次关系

-> 64 bit kernel (64位支持)-> gerernal setup-> local version (当前编译版本号)-> Enable loadable modual support (允许模块加载)-> Progressor type and features-> Processor Family(Core2) (架构类型)-> Symmetric multi-processing support(多核支持)-> SMT (超线程 可选)-> Bus Options(PCI etc.)-> PCI support (pci总线支持)-> Device Drivers-> SCSI device support-> SCSI deveice support-> SCSI disk support-> Fusion MPT device support (虚拟磁盘支持)-> Fusion MPT logging facility (虚拟磁盘日志 可选)-> Fusion MPT ScsiHost drivers for SPI (虚拟磁盘)-> Fusion MPT misc device (ioctl) driver (磁盘可做初始化)-> Input Device support-> Keyboards (键盘支持)-> Mice (ps/2支持)-> Mouse interface (鼠标接口 可选)-> USB support-> Support for Host-side USB-> EHCI HCD (USB 2.0) support (usb 2.0)-> xHCI HCD (USB 3.0) support (usb 3.0可选)-> OHCI HCD (USB 1.1) support (usb 1.1)-> UHCI HCD (most Intel and VIA) support (可选)-> Gernal Driver Options-> Maintain a devtmpfs filesystem to mount at /dev (使用devtmpfs机制挂载设备文件)-> Automount devtmpfs at /dev, after the kernel mounted the rootfs (内核自动探测自动挂载)-> Network device support-> Network core driver support (网络核心驱动程序)-> Ethernet driver support (以太网卡驱动程序)-> Intel devices-> Intel(R) PRO/1000 Gigabit Ethernet support ()-> Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support (板载网卡驱动)-> File system-> The Extended 4 (ext) filesystem-> Executable file formats / Emulations (可执行文件系统)-> Kernel support for ELF binaries (支持ELF二进制程序)-> Kernel support for scripts starting with #! (支持bash脚本)-> Networking support-> Networking options-> Unix domain sockets-> UNIX: socket monitoring interface-> TCP/IP networking-> IP: multicasting (ip多播协议)-> IP: advanced router (高级路由协议)-> IP: kernel level autoconfiguration (内核级别配置)-> IP: DHCP support (DHCP服务)-> IP: BOOTP support (早起DHCP服务)-> IP: RARP Support (局域网ip,mac转换协议)-> IP: TCP syncookie support (tcp同步状态支持)

# 选择结束后,make menuconfig会生成.config文件在当前目录下

# 仅编译内核,使用4线程编译make bzImage -j 4# 编译完毕,拷贝内核到/mnt/boot中,这将是未来我们要使用的新内核cp /usr/src/linux/arch/x86_64/boot/bzImage /mnt/boot/

3. 安装busybox

# 下载busybox, 请 busybox下载

# 依赖环境 glibc-static 下载 , 请 ?query=glibc-static&submit=Search+…

# 为busybox安装解决依赖rpm -ivh glibc-static.rpm# 解压busybox到当前目录tar xf busybox-1.21.1.tar.bz2# 类似与内核的选择框,需要选择 *Busybox Settings —>Build Options —>—> Build BusyBox as a static binary (no shared libs)# 选择完毕退出后安装busyboxmake && make install

# 在安装完毕后busybox当前目录会生成 _install 文件

# 完成后将当前目录 _install 中所有文件复制到 /mnt/sysroot 中cp -rd _install/* /mnt/sysroot# 由最开始的图中我们知道,精简内核的运行依靠 busybox, 那busybox运行# 需要依赖某些二进制文件及库文件,因此可以使用 上一篇 10步骤的脚本移植# busybox 的二进制及库文件

4. 依次提供下列文件,为精简内核的运行做准备 etc/inittab etc/rc.d/rc.sysinit etc/fstab

[root@King200 sysroot]# cat etc/fstab

/dev/sda1 /boot ext4 defaults 0 0

proc /proc proc defaults 0 0

或者在河边放下一盏写着心愿的河灯,祝愿一切安好。

定制属于自己的 linux 内核(Step 2)

相关文章:

你感兴趣的文章:

标签云: