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...