ARM核心編譯以及最小檔案系統

2021-10-02 01:14:51 字數 4802 閱讀 3155

qemu 執行核心

參考資料

本篇文章展示了編譯arm核心,利用busybox製作最小根檔案系統。

tar -xvf linux-4.4.205.tar.xz
root@iz2zeha39b7w1ayiu8hv9rz:~/run_linux/test_linux/linux-4.4.205# sed -n '257,258p' makefile

arch = arm

cross_compile = arm-linux-gnueabi-

# 寫預設配置

root@iz2zeha39b7w1ayiu8hv9rz:~/run_linux/test_linux/linux-4.4.205# make vexpress_defconfig arch=arm cross_compile=arm-linux-gnueabi-

## configuration written to .config

#

make menuconfig

general setup --->

[ ] initial ram filesystem and ram disk (initramfs/initrd) support

# 清空啟動時候的命令程式

boot options --->

() default kernel command string

# 設定核心空間的分布

kernel features --->

memory split (3g/1g user/kernel split) --->

(x) 3g/1g user/kernel split

# 開始編譯

make bzimage -j4 arch=arm cross_compile=arm-linux-gnueabi-

kernel: arch/arm/boot/image is ready

kernel: arch/arm/boot/image is ready

kernel: arch/arm/boot/zimage is ready

make dtbs arch=arm cross_compile=arm-linux-gnueabi-

root@zhou ~/ru/te/busybox-1.28.0#  make menuconfig

settings --->

[*] build static binary (no shared libs)

make arch=arm cross_compile=arm-linux-gnueabi- config_prefix=/root/run_linux/roofs install
編譯成完成以後,可以檢視到多出下面幾個檔案

ls

bin linuxrc sbin usr

root@zhou ~/ru/roofs#  mkdir etc 

root@zhou ~/ru/roofs# mkdir dev

root@zhou ~/ru/roofs# mkdir mnt

root@zhou ~/ru/roofs# mkdir -p etc/init.d/

root@zhou ~/ru/roofs#  cat 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

mount -t 9p -o trans=virtio kmod_mount /mnt

mdev -s

新增執行許可權

root@zhou ~/ru/roofs#  chmod +x etc/init.d/rcs
root@zhou ~/ru/roofs#  touch etc/fstab

root@zhou ~/ru/roofs# cat etc/fstab

# # device:指定載入的磁碟分割槽或移動檔案系統,除了指定裝置檔案外,也可以使用uuid、label來指定分割槽;

# dir:指定掛載點的路徑;

# type:指定檔案系統的型別,如ext3,ext4等;

# options:指定掛載的選項,預設為defaults,其他可用選項包括acl,noauto,ro等等;

# dump:表示該掛載後的檔案系統能否被dump備份命令作用;0表示不能,1表示每天都進行dump備份,2表示不定期進行dump操作。

# pass:表示開機過程中是否校驗扇區;0表示不要校驗,1表示優先校驗(一般為根目錄),2表示為在1級別校驗完後再進行校驗;

#device mount-point type options dump fsck order

proc /proc proc defaults 0 0

tmpfs /tmp tmpfs defaults 0 0

sysfs /sys sysfs defaults 0 0

tmpfs /dev tmpfs defaults 0 0

var /dev tmpfs defaults 0 0

ramfs /dev ramfs defaults 0 0

debugfs /sys/kernel/debug debugfs defaults 0 0

root@zhou ~/ru/roofs#  touch etc/inittab  

root@zhou ~/ru/roofs# cat etc/inittab

::sysinit:/etc/init.d/rcs

::respawn:-/bin/sh

::askfirst:-/bin/sh

::ctrlaltdel:/bin/umount -a -r

root@zhou ~/ru/roofs#  cd dev 

root@zhou ~/ru/ro/dev# mknod console c 5 1

root@zhou ~/ru/ro/dev# mknod null c 1 3

jffs檔案系統映象
# cleanup if necessary

umount /dev/mtdblock0 &>/dev/null

modprobe -r mtdram &>/dev/null

modprobe -r mtdblock &>/dev/null

modprobe mtdram total_size=32768 erase_size=256 || exit 1

dd if=roofs.jffs of=/dev/mtdblock0

root@zhou ~/run_linux#  apt-get install qemu-system-arm
qemu-system-arm -m vexpress-a9 -smp 4 -m 200m -kernel \

arch/arm/boot/zimage \

arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic

qemu-system-arm -m vexpress-a9 -smp 4 -m 200m -kernel \

arch/arm/boot/zimage \

arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic

至於為什麼console=ttyama0會是這個值,需要在編譯核心的根檔案下,檢視.config檔案

config_cmdline="console=ttyama0"
由於需要跑程式,當然少不了動態庫了

隨便選擇乙個標準庫

locate libm.so 

/lib/x86_64-linux-gnu/libm.so.6

/lib32/libm.so.6

/libx32/libm.so.6

/usr/arm-linux-gnueabi/lib/libm.so

/usr/arm-linux-gnueabi/lib/libm.so.6

/usr/arm-linux-gnueabihf/libsf/libm.so

/usr/arm-linux-gnueabihf/libsf/libm.so.6

/usr/lib/x86_64-linux-gnu/libm.so

/usr/lib32/libm.so

/usr/libx32/libm.so

確定了對應的編譯器對應的庫

將其複製到根檔案系統lib資料夾下面即可

cp  /usr/arm-linux-gnueabi/lib/*.so* /ptah-to-fs/lib   -d

4412最小檔案系統和編譯環境配置

1 安裝ubuntu14.04。最好是32位的,因為後面make ext4fs有相容問題。2 開啟root登陸。方便很多。3 apt get install arm linux g 200多m 4 複製訊為4412光碟裡面最小映象系統system.tar.bz,解壓到你想要的路徑 5 編譯busyb...

最小檔案系統分析(aufs c)

參考 1 檔案系統的目的是用來管理檔案的。2 檔案系統管理檔案的方式 struct super block,struct vfsmount。3 檔案的組織方式 struct inode,struct dentry。4 檔案系統加入 登記 到核心 4.1 register filesystem au ...

檔案系統編譯進核心

1 利用busybox製作根檔案目錄。需要有init 和 linuxrc 2 makemenuconfig 在general setup 中設定 initial ram filesystem and ram disk 後指定檔案系統原始檔路徑.3 makemenuconfig 在boot optio...