BeagleBone Black using busybox === [前一篇BeagleBone Black Build Syatem](https://hackmd.io/iiylzysrQYyvolJCiI61qg) 之前我直接使用debian的rootfs,這裡建置busybox當作rootfs(書上第5章節)。 在途中,有遇到一些問題,我找到了一些資料。 [X-021-ROOTFS](http://www.wowotech.net/x_project/simple_busybox.html) [使用qemu建立一個linux核心和busybox根檔案系統](https://hackmd.io/@c_0KKCwzQE2rsd39mpvNQQ/rknxhDzvB) :::info 上一篇有建置過的內容,本篇不在建置,直接使用。 * 前一篇已建置完成的 Linux kernel u-boot ::: --- :::info * Cross-compile使用arm-linux-gnueabi- ::: 1. 從github下載busybox的原始碼: ```bash= CC=arm-linux-gnueabi- git clone --depth=1 https://github.com/mirror/busybox ``` 2. 初始化busybox: ```bash= make ARCH=arm CROSS_COMPILE=${CC} distclean make ARCH=arm CROSS_COMPILE=${CC} defconfig ``` 3. 選擇靜態編譯: 輸入以下命令,進入進階設定 ```bash= make ARCH=arm CROSS_COMPILE=${CC} menuconfig ``` :::info Settings->Build static library   ::: 4. 編譯busybox ```bash= make ARCH=arm CROSS_COMPILE=${CC} -j6 ``` 5. 建立安裝目標目錄,並安裝busybox ```bash= mkdir rootfs make ARCH=arm CROSS_COMPILE=${CC} install CONFIG_PREFIX=```pwd```/rootfs ``` 6. 建立rootfs所需的其餘資料夾 ```bash= mkdir -pv ```pwd```/rootfs/{root,boot,tmp,bin,sbin,etc,proc,sys,usr,dev/{bin,sbin}} ``` 7. 複製etc/init.d/rcS範例到自己的rootfs ```bash= mkdir -p rootfs/etc/init.d/ cp examples/bootfloppy/etc/init.d/rcS rootfs/etc/init.d/ vim rootfs/etc/init.d/rcS ``` 修改成 ```bash= #! /bin/sh /bin/mount -a mount -t proc proc /proc mount -o remount,rw / mount -t sysfs sysfs /sys ``` 8. 創建etc/inittab (書上 5.9 init) ```bash= touch rootfs/etc/inittab vim rootfs/etc/inittab ``` 內文輸入: ```text= #first: run the system script file ::sysinit:/etc/init.d/rcS ::respawn:/sbin/getty -L ttyS0 115200 vt100 ::ctrlaltdel:-/bin/reboot #umount all filesystem ::shutdown:/bin/umount -a -r #restart init process ::restart:/sbin/init ``` 9. 新增使用者帳號 ```bash= touch rootfs/etc/passwd vim rootfs/etc/passwd ``` 為了加入使用者,passwd檔案內新增以下資料: ```text= root:x:0:0:root:/root:/bin/sh daemon:x:1:1:daemon:/usr/bin:/bin/false ``` :::info passwd檔案格式: 格式: * 登入帳號名稱 * 用來驗證密碼的hash(x表示存在/etc/shadow中) * UID使用者編號 * GID使用者群組編號 * 備註欄位(通常留空) * 使用者的家目錄(home)位置 * (非必要)使用者所使用的命令列環境 ::: 10. 新增密碼(/etc/shadow) ```bash= touch rootfs/etc/shadow vim rootfs/etc/shadow ``` ```text= root::10933:0:99999:7::: daemon:*:10933:0:99999:7::: ``` :::info 格式: * 帳號名稱 * 密碼(*表示不管輸入什麼密碼都無法登入) * 其餘七個跟密碼的複雜度有關係,但Embedded system卻不會使用到。[詳細參考shadow(5)](https://man7.org/linux/man-pages/man5/shadow.5.html) ::: 11. 新增群組(/etc/group) ```bash= touch rootfs/etc/group vim rootfs/etc/group ``` ```text= root:x:0: daemon:x:1: ``` :::info 格式: * 帳號名稱 * 用來驗證密碼的hash(x表示存在/etc/shadow中) * GID使用者群組編號(以逗點分隔使用者所屬的群組) ::: 12. 將整個建立完成的rootfs複製到sdcard ```bash= sudo cp -rf rootfs/* /media/rootfs/ ``` 13. 複製Linux kernel到rootfs。[前一篇BeagleBone Black Build Syatem](https://hackmd.io/iiylzysrQYyvolJCiI61qg) ```bash= cd linux kernel_version=`make kernelversion` sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt" sudo cp -v arch/arm/boot/zImage /media/rootfs/boot/vmlinuz-${kernel_version} sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version} sudo cp -v arch/arm/boot/dts/*.dtb /media/rootfs/boot/dtbs/${kernel_version} sudo make -j6 ARCH=arm CROSS_COMPILE=${CC} INSTALL_MOD_PATH=/media/rootfs modules_install sync ``` 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up