日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發(fā)布時間:2023/12/20 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

要學(xué)習(xí)linux內(nèi)核,先要能夠編譯內(nèi)核,還需要了解內(nèi)核如何啟動根文件系統(tǒng)。這樣你才能在修改linux內(nèi)核代碼之后,完成驗證的過程。

本文教你完成下列過程:

1.下載linux并編譯linux內(nèi)核源碼

2.編譯busybox

3.制作一個最小的根文件系統(tǒng)

4.qemu啟動你編譯好的內(nèi)核和根文件系統(tǒng)

linux源碼下載地址:

mirrors.edge.kernel。org/pub/linux/kernel/

我選擇的版本是:4.9.229

cdn.kernel。org/pub/linux/kernel/v4.x/linux-4.9.229.tar.xz

下載到本地,解壓,然后進入linux-4.9.229目錄:

1.指定硬件體系架構(gòu)。

為了減少安裝編譯器的過程,我在本例中使用的是x86,因為我的開發(fā)環(huán)境就是x86。如果你要編譯arm的內(nèi)核,則指定ARCH=arm且需要安裝交叉編譯器。

# export ARCH=x86

2.配置board config,此處配置為 x86_64_defconfig。好了,我們點好菜了,菜單就是x86_64_defconfig

# make x86_64_defconfig

3.配置內(nèi)核

這一步其實是對第2步的菜單進行微調(diào),我們需要內(nèi)核支持ramdisk驅(qū)動,所以需要選中如下配置:

General setup --->----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) supportDevice Drivers --->[*] Block devices ---><*> RAM block device support(65536) Default RAM disk size (kbytes)

4.編譯內(nèi)核

# make

編譯成功后的內(nèi)核位于:arch/x86_64/boot/bzImage

下載buysbox源碼,下載地址:

busybox。net/downloads/

我使用的版本是busybox-1.30.0

1.解壓buysbox源碼

# tar xvf busybox-1.30.0.tar.bz2

2.配置buysbox源碼

在這里我們把busybox配置為靜態(tài)編譯,這樣busybox在運行的時候就不需要額外的動態(tài)鏈接庫了。

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

3.編譯和安裝

#make && make install

4.編譯完成后的busybox就安裝在源碼根目錄下的_install目錄了,我們進入_install目錄,補充一些必要的文件或目錄,相關(guān)的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

這樣一個最小的、完整的可以被內(nèi)核啟動的文件系統(tǒng)就齊活啦。

制作根文件系統(tǒng)鏡像文件。

思路:

1.先制作一個空的鏡像文件;

2.然后把此鏡像文件格式化為ext3格式;

3.然后把此鏡像文件掛載,并把根文件系統(tǒng)復(fù)制到掛載目錄;

4.卸載該鏡像文件。

5.打成gzip包。

#!/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

最終生成的文件系統(tǒng)鏡像名字為:rootfs.img.gz

準(zhǔn)備好了內(nèi)核和文件系統(tǒng)鏡像,幸福的一刻馬上來臨了:

通過qemu模擬器啟動我們自己編譯的內(nèi)核和文件系統(tǒng):

# 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系統(tǒng)就起來啦:

好了,經(jīng)過以上的步驟,你可以自己編譯一個內(nèi)核和文件系統(tǒng)。有了這樣的基礎(chǔ),你在之后就可以自由的修改linux內(nèi)核代碼并run起來進行驗證啦。

總結(jié)

以上是生活随笔為你收集整理的带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。