[TOC]
# rootfs 是一個系統
kernel需要loader來引導,init啟動服務,udev動態創建/dev/node,控制登錄用戶登錄,動態庫。。。
## Debian
https://wiki.debian.org/Arm64Port
不知道怎么boot,Pi 有一個32bit的版本,非常非常慢,包很全。
## Buildroot
網站漂亮了,可以編譯一個rootfs,chroot玩一玩。沒有一個特定適用的領域,不容易推廣。
https://buildroot.org/downloads/buildroot-2017.08.1.tar.bz2
## Yocto
大公司合伙搞的,python寫的,任務并行。比較重。
## OpenWrt/LEDE
buildroot在soho路由器的衍化,發展得很好了。自己開發的procd/ubus一套。國內網下包巨慢。看來要等兩天編完了,再更新下。
`git clone https://github.com/lede-project/source.git --depth=1`
### opkg 包管理
`opkg` 用來打 `.ipk`, 包的信息也打到文件系統里。單獨升一個ipk也很方便的。
~~~
build_dir/target-aarch64_generic_musl/root-layerscape/usr/lib/opkg/
cat build_dir/target-aarch64_generic_musl/root-layerscape/usr/lib/opkg/status
Package: opkg
Version: 2017-07-28-4bd8601e-1
Depends: libc, uclient-fetch, libpthread, libubox
Status: install user installed
Architecture: aarch64_generic
Conffiles:
/etc/opkg.conf b73c0a02cb7bc300b2e6c7c29e8e6d38bdb6ded314319e89be3b352f59fff5ab
/etc/opkg/customfeeds.conf 61d1f3aa62fe977614ed0c2f0ad3b2ee2f7b451bfb34812071d86d31a4d43d4a
Installed-Time: 1510271590
~~~
### 從目錄看結構
一個基本的rootfs不需要多少東西,有busybox,主要命令也支持得很不錯。用一個只讀的文件系統,疊加一個讀寫文件系統,合成一個讀寫文件系統,還是很有用的。否則就用link,非常不方便。
~~~
# process 1 ?= procd, handle hotplug event
/sbin/init
# /lib 各種 .so
lib/libblobmsg_json.so lib/libc.so lib/libfstools.so lib/libjson_script.so lib/libsetlbf.so lib/libubox.so lib/libubus.so lib/libuci.so lib/libvalidate.so
# init scripts
etc/rc.d/S00sysfixtime etc/rc.d/S10system etc/rc.d/S12log etc/rc.d/S50cron etc/rc.d/S95done etc/rc.d/S98gpio_switch etc/rc.d/S99urandom_seed
etc/rc.d/S10boot etc/rc.d/S11sysctl etc/rc.d/S20network etc/rc.d/S50dropbear etc/rc.d/S96led etc/rc.d/S98sysntpd
# busybox
# ubus/uci/fs overlay/web framework
~~~
### build系統
1. toolchain。
2. 包管理,編譯時和運行時,最好都管上。
3. library, header file 編譯時的管理。
4. 打包rootfs,去掉不必要的文件,支持各種格式。