linux 源码怎么编译-带你阅读Linux内核源码:下载源码、编译内核并运行一个最小系统

要学习Linux内核,首先要会编译内核,还需要了解内核是如何启动根文件系统的。 这样就可以完成Linux内核代码更改后的验证过程。

本文将引导您完成以下过程:

1.下载linux并编译linux内核源码

2.编译busybox

3.制作最小根文件系统

4.qemu启动编译好的内核和根文件系统

Linux源码下载地址:

镜像.边缘.内核。 组织/pub/linux/内核/

我选择的版本是:4.9.229

CDN.内核。 org/pub/linux/kernel/v4.x/linux-4.9.229.tar.xz

下载到本地,解压linux 源码怎么编译,然后进入linux-4.9.229目录:

1. 指定硬件架构。

为了减少安装编译器的过程,本例中我使用了x86,因为我的开发环境是x86。 如果要编译arm内核linux 源码怎么编译,指定ARCH=arm,需要安装交叉编译器。

# export ARCH=x86

2、配置boardconfig,这里配置为x86_64_defconfig。 好的,我们已经点了,菜单是x86_64_defconfig

# make  x86_64_defconfig

3.配置内核

这一步当然是对步骤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

编译成功后的内核位于:arch/x86_64/boot/bzImage

下载buysbox源码,下载地址:

繁忙的盒子。 网/下载/

我使用的版本是busybox-1.30.0

1.解压buysbox源码

# tar xvf busybox-1.30.0.tar.bz2

2.配置buysbox源码

这里我们将busybox配置为静态编译,这样busybox在运行时不需要额外的动态链接库。

# make menuconfig
Busybox Settings  --->
      Build Options  --->
            [*] Build BusyBox as a static binary (no shared libs)

3.编译安装

#make && make install

4、编译完成后,busybox安装在源码根目录下的_install目录下。 我们进入 _install 目录并添加一些必要的文件或目录。 相关shell命令的原文链接如下:

# mkdir etc dev mnt
# mkdir -p etc/init.d/
# vim etc/fstab
proc  /proc proc  defaults 0 0
temps /tmp  rpoc  defaults 0 0
none  /tmp  ramfs defaults 0 0
sysfs /sys  sysfs defaults 0 0
mdev  /dev  ramfs defaults 0 0
# vim etc/init.d/rcS
mkdir -p /proc
mkdir -p /tmp
mkdir -p /sys
mkdir -p /mnt
/bin/mount -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 etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::cttlaltdel:/bin/umount -a -r
# chmod 755 etc/inittab
# cd dev
# mknod console c 5 1
# mknod null c 1 3
# mknod tty1 c 4 1 

linux 源码怎么编译-带你阅读Linux内核源码:下载源码、编译内核并运行一个最小系统

这样一个最小的、完整的、可以由内核启动的文件系统就可以工作了。

制作根文件系统镜像文件。

想法:

1、先制作一个空的镜像文件;

2、然后将镜像文件低格为ext3格式;

3、然后挂载镜像文件,并将根文件系统复制到挂载目录下;

4. 卸载镜像文件。

5. 制作gzip包。

linux 源码怎么编译-带你阅读Linux内核源码:下载源码、编译内核并运行一个最小系统

#!/bin/bash
rm -rf rootfs.ext3
rm -rf fs
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mkdir fs
mount -o loop rootfs.ext3 ./fs
cp -rf ./_install/* ./fs
umount ./fs
gzip --best -c rootfs.ext3 > rootfs.img.gz 

最终生成的文件系统镜像名称为:rootfs.img.gz

规划好内核和文件系统镜像后,幸福的时刻即将到来:

通过qemu模拟器启动我们自己编译的内核和文件系统:

# qemu-system-x86_64 
  -kernel ./linux-4.9.229/arch/x86_64/boot/bzImage  
  -initrd ./busybox-1.30.0/rootfs.img.gz   
  -append "root=/dev/ram init=/linuxrc"  
  -serial file:output.txt

这是一个完整的最小Linux系统:

好了,经过上面的步骤,你就可以自己编译一个内核和文件系统了。 有了这个基础,以后就可以自由更改Linux内核代码并运行验证。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 linux 源码怎么编译-带你阅读Linux内核源码:下载源码、编译内核并运行一个最小系统 https://www.wkzy.net/game/190383.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务