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