[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,去掉不必要的文件,支持各种格式。