一、 环境准备
需要下载相应的环境,以下提供了工具获取方法。建议源码编译安装,编译若少依赖就自行百度。官网都会有编译安装教程。
开发操作系统:
/#download
linux源码获取:
busybox源码版本:
/downloads/
qemu
/
二、Linux源码编译
1.指定硬件体系架构。
目前使用的是x86,因为我的开发环境就是x86。如果你要编译arm的内核,则指定ARCH=arm且需要安装交叉编译器。
export ARCH=x86
2.配置board config,此处配置为 x86_64_defconfig。
make x86_64_defconfig
3.配置内核
此处可以有图形界面配置想要编译内核的模块
make menuconfig
这一步其实是对第2步的菜单进行微调,我们需要内核支持ramdisk驱动,所以需要选中如下配置:
General setup —>
----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers —>
[*] Block devices —>
<*> RAM block device support
(65536) Default RAM disk size (kbytes)
4、编译内核
make
三、buysbox编译并制作内核
1.解压buysbox源码
tar xvf busybox-xxxxx.tar.bz2
2.配置buysbox源码为静态编译
make menuconfig
Busybox Settings —>
Build Options —>
[*] Build BusyBox as a static binary (no shared libs)
3.编译和安装
make && make install
4.编译完成后的busybox就安装在源码根目录下的_install目录了,我们进入_install目录,补充一些必要的文件或目录,相关的shell命令如下:
cd _installmkdir etc dev mntmkdir -p proc sys tmp mkdir -p etc/init.d/
写fstab
vim etc/fstab
将下面信息写入
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
写rcS
vim etc/init.d/rcS
写入下面内容并保存
echo -e "Welcome to Linux"/bin/mount -aecho -e "Remounting the root filesystem"mount -o remount,rw /mkdir -p /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -s
执行:
chmod 755 etc/init.d/rcS
写inittab
vim etc/inittab
写入并保存:
::sysinit:/etc/init.d/rcS::respawn:-/bin/sh::askfirst:-/bin/sh::ctrlaltdel:/bin/umount -a -r
执行:
chmod 755 etc/inittabcd devmknod console c 5 1mknod null c 1 3mknod tty1 c 4 1
内核制作结束
四、制作根文件系统镜像文件
先回到busy-box的目录
cd ..
1.先制作一个空的镜像文件
2.然后把此镜像文件格式化为ext3格式
3.然后把此镜像文件挂载,并把根文件系统复制到挂载目录
4.卸载该镜像文件
5.打成gzip包
直接来个bash脚本
vim mkimg.sh
写入并保存
#!/bin/bashrm -rf rootfs.ext3rm -rf fsdd if=/dev/zero of=./rootfs.ext3 bs=1M count=32mkfs.ext3 rootfs.ext3mkdir fsmount -o loop rootfs.ext3 ./fscp -rf ./_install/* ./fsumount ./fsgzip --best -c rootfs.ext3 > rootfs.img.gz
执行
chmod 755 ./mkimg.sh
执行脚本
./mkimg.sh
就得到了文件系统镜像:rootfs.img.gz
五、qemu模拟器启动我们自己编译的内核和文件系统
下载qemu源码
解压进入目录
./configure --prefix=/opt/qemu
make
make install
启动内核
参数路径需要修改
/opt/qemu/bin/qemu-system-x86_64 -kernel /home/wdhh/linux-6.0-rc7/arch/x86_64/boot/bzImage -initrd /home/wdhh/busybox-1.35.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrc" -serial file:output.txt
无图形界面的终端上可以使用
/opt/qemu/bin/qemu-system-x86_64 -kernel /home/wdhh/linux-6.0-rc7/arch/x86_64/boot/bzImage -initrd /home/wdhh/busybox-1.35.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrc console=ttyS0" -serial mon:stdio -nographic
退出用
Ctrl - a x
大功造成哈哈哈哈哈哈
如果觉得《Linux内核源码编译调试》对你有帮助,请点赞、收藏,并留下你的观点哦!