日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

要學習linux內核,先要能夠編譯內核,還需要了解內核如何啟動根文件系統。這樣你才能在修改linux內核代碼之后,完成驗證的過程。

本文教你完成下列過程:

1.下載linux并編譯linux內核源碼

2.編譯busybox

3.制作一個最小的根文件系統

4.qemu啟動你編譯好的內核和根文件系統

帶你閱讀linux內核源碼:下載源碼、編譯內核并運行一個最小系統

 

linux源碼下載地址:

https://mirrors.edge.kernel.org/pub/linux/kernel/

我選擇的版本是:4.9.229

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

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

1.指定硬件體系架構。

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

# export ARCH=x86

2.配置board config,此處配置為 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

帶你閱讀linux內核源碼:下載源碼、編譯內核并運行一個最小系統

 

下載buysbox源碼,下載地址:

https://busybox.net/downloads/

我使用的版本是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內核源碼:下載源碼、編譯內核并運行一個最小系統

 

制作根文件系統鏡像文件。

思路:

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

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

3.然后把此鏡像文件掛載,并把根文件系統復制到掛載目錄;

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 

最終生成的文件系統鏡像名字為:rootfs.img.gz

準備好了內核和文件系統鏡像,幸福的一刻馬上來臨了:

帶你閱讀linux內核源碼:下載源碼、編譯內核并運行一個最小系統

 

通過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內核源碼:下載源碼、編譯內核并運行一個最小系統

 

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

記得關注“技術簡說”,持續分享linux內核知識,讓你一步一步成為linux內核高手。

分享到:
標簽:內核 源碼 linux
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定