主页 > imtoken钱包安装下载 > 带你阅读linux内核源码:下载源码,编译内核,运行最小系统
带你阅读linux内核源码:下载源码,编译内核,运行最小系统
学习linux内核首先要会编译内核源码下载带usdt,还需要了解内核是如何启动根文件系统的。 这样修改linux内核代码后就可以完成验证过程了。
本文将指导您完成以下过程:
1.下载linux并编译linux内核源码
2.编译busybox
3.制作一个最小的根文件系统
4.qemu启动你编译好的内核和根文件系统
Linux源码下载地址:
我选择的版本是:4.9.229
下载到本地,解压,进入linux-4.9.229目录:
1. 指定硬件架构。
为了减少安装编译器的过程,我在这个例子中使用的是x86,因为我的开发环境是x86。 如果要编译arm内核,指定ARCH=arm,需要安装交叉编译器。
# 导出 ARCH=x86
2.配置board config,这里配置为x86_64_defconfig。 嗯,我们点了,菜单是x86_64_defconfig
# 制作 x86_64_defconfig
3.配置内核
这一步其实就是对第2步的菜单进行微调,我们需要内核支持ramdisk驱动,所以需要选择如下配置:
一般设置--->
----> [*] 初始 RAM 文件系统和 RAM 磁盘 (initramfs/initrd) 支持
设备驱动程序--->
[*] 块设备 --->
RAM 块设备支持
(65536) 默认 RAM 磁盘大小(千字节)
4.编译内核
# 制作
编译成功的内核位于:arch/x86_64/boot/bzImage
下载buysbox源码,下载链接:
我使用的版本是busybox-1.30.0
1.解压buysbox源码
# tar xvf busybox-1.30.0.tar.bz2
2.配置buysbox源码
这里我们配置busybox静态编译,这样busybox在运行的时候不需要额外的动态链接库。
# 制作菜单配置
忙碌框设置--->
构建选项--->
[*] 将 BusyBox 构建为静态二进制文件(无共享库)
3.编译安装
#make && 安装
4、编译完成后,busybox安装在源码根目录下的_install目录下。 我们进入_install目录,添加一些必要的文件或目录。 相关的shell命令如下:
# mkdir 等 dev mnt
# mkdir -p etc/init.d/
#vim 等/fstab
proc /proc proc 默认值 0 0
tmpfs /tmp tmpfs 默认值 0 0
无 /tmp ramfs 默认值 0 0
sysfs /sys sysfs 默认值 0 0
mdev /dev ramfs 默认值 0 0
#vim etc/init.d/rcS
mkdir -p /proc
mkdir -p /tmp
mkdir -p /sys
mkdir -p /mnt
/bin/挂载-a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
# chmod 755 etc/init.d/rcS
#vim 等/inittab
::sysinit:/etc/init.d/rcS
::重生:-/bin/sh
::首先询问:-/bin/sh
::cttlaltdel:/bin/umount -a -r
# chmod 755 等/inittab
# 光盘开发
# mknod 控制台 c 5 1
# mknod null c 1 3
# mknod tty1 c 4 1
这样一个可以由内核启动的最小的、完整的文件系统将起作用。
创建根文件系统映像文件。
想法:
1.先制作一个空的图片文件;
2、然后将镜像文件格式化为ext3格式;
3、然后挂载镜像文件,将根文件系统复制到挂载目录下;
4. 卸载映像文件。
5.制作一个gzip包。
#!/bin/庆典
rm -rf rootfs.ext3
rm -rf fs
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 根文件系统.ext3
mkdir fs
mount -o 循环 rootfs.ext3 ./fs
cp -rf ./_install/* ./fs
卸载./fs
gzip --best -c rootfs.ext3 > rootfs.img.gz
最终生成的文件系统镜像名称为:rootfs.img.gz
内核和文件系统镜像准备就绪,幸福的时刻来了:
通过qemu模拟器启动我们自己编译好的内核和文件系统:
#qemu-系统-x86_64 \
-内核 ./linux-4.9.229/arch/x86_64/boot/bzImage \
-initrd ./busybox-1.30.0/rootfs.img.gz \
-附加“root=/dev/ram init=/linuxrc”\
-串口文件:output.txt
这样一个完整的最小linux系统就起来了:
好了,经过上面的步骤,你就可以自己编译一个内核和文件系统了。 有了这样的基础,就可以自由修改linux内核代码,后面运行验证了。
关注《Technical Brief》(同名头条)源码下载带usdt,100个linux内核开发免费视频教程,带你由浅入深学习linux内核源码。