nanopi相关系列开发板具有超高性价比,广受创客欢迎。在官网中下载到的镜像系统都是ubuntu,debian等linux发行版,这些发行版运行于linux上优点明显。而嵌入式平台上需要根据需要裁剪相关的库和命令。而构造文件系统使用普遍的工具是busybox和buildroot。
Buildroot是一款使用交叉编译来简化和自动化为嵌入式系统构建完整Linux系统的过程的工具。相比以前使用的busybox发现功能更强大,支持很多的库,以前使用busybox很多库需要自己去编译安装比如i2c-tools,alsa-lib还有网络,文件处理很多很多库和命令,而通过buildroot很多开源都可以一键make menuconfig配置就可以搞定。
buildroot源码下载
git clone git://git.buildroot.net/buildroot
make menuconfig 设置
- 设置Target options
设置 Target Architecture为cortex-A7
Target Architecture为ARM(little endian)
- Target Architecture (ARM (little endian)) ---> │ │
│ │ Target Binary Format (ELF) ---> │ │
│ │ Target Architecture Variant (cortex-A7) ---> │ │
│ │ Target ABI (EABIhf) ---> │ │
│ │ Floating point strategy (VFPv4-D16) ---> │ │
│ │ ARM instruction set (ARM) --->
- 设置工具链 ToolChain
- 如下所示,设置使用外部工具链,选择已安装在本地的4.9版本的arm-linux-gcc编译器,注意外部编译器的内核头文件版本应该和菜单External toolchain kernel headers series这一项保持一致
- C库选择glic/eglic,选择该编译器工具链支持SSP,RPC和C++
Toolchain type (External toolchain) ---> │ │
│ │ *** Toolchain External Options *** │ │
│ │ Toolchain (Custom toolchain) ---> │ │
│ │ Toolchain origin (Pre-installed toolchain) ---> │ │
│ │ (/home/wu/arm-projiect/nanoPI_app_toolchain/gcc-x64/4.9.3/) Toolchain path │ │
│ │ (arm-linux) Toolchain prefix │ │
│ │ External toolchain gcc version (4.9.x) ---> │ │
│ │ External toolchain kernel headers series (3.10.x) ---> │ │
│ │ External toolchain C library (glibc/eglibc) ---> │ │
│ │ [*] Toolchain has SSP support? │ │
│ │ [*] Toolchain has RPC support? │ │
│ │ [*] Toolchain has C++ support?
- 系统配置 System configuration
- 进入 System configuration 菜单,对目标系统进行配置,包括主机名称( System hostname)、 欢迎旗标( System banner)、初始化系统( Init system)、设备管理方式( /dev management)、 登录方式和 Shell
Root FS skeleton (default target skeleton) ---> │ │
│ │ (wu) System hostname │ │
│ │ (Welcome to Buildroot) System banner │ │
│ │ Passwords encoding (md5) ---> │ │
│ │ Init system (BusyBox) ---> │ │
│ │ /dev management (Dynamic using devtmpfs + mdev) ---> │ │
│ │ (system/device_table.txt) Path to the permission tables │ │
│ │ [ ] support extended attributes in device tables │ │
│ │ [ ] Use symlinks to /usr for /bin, /sbin and /lib │ │
│ │ [*] Enable root login with password │ │
│ │ () Root password │ │
│ │ /bin/sh (busybox' default shell) ---> │ │
│ │ [*] Run a getty (login prompt) after boot --->
-
软件包配置
buidlroot相比busybox提供了很多软件包,比如alsa-utils,ffmpeg,iwlist等等,只需要在菜单里勾选然后编译
-
编译buildroot
在终端输入 make 命令, Buildroot 即开始编译。在此过程中,会从远程服务器下载所选 中的软件包,整个过程时间取决于网络状况
-
完善文件系统
编译完成后,在output/images目录下生成各种镜像文件,先使用网络文件系统mount nfs,将output/images目录下的rootfs.tar解压到nfs_root目录
-
cd nfsroot 增加/dev/null 文件
cd dev/
sudo mknod null c 1 3
- 以 ramfs 方式挂载/dev 目录(以 ramfs 方式挂载/dev 目录,能够提高 mdev 生成设备文件的速度)
vim etc/init.d/S10mdev
在此配置文件 /sbin/mdev -s前面增加
mount -t ramfs mdev /dev
mkdir -p /dev/pts
mkdir -p /dev/shm
- 添加命令提示符
修改etc/profile 添加 export PS1='\u@\h:\w\$ '
- 修改uboot命令行的参数 支持挂接nfs
进入uboot命令行
bootcmd设置:setenv bootcmd run boot_normal
bootargs设置: setenv bootargs console=${console} root=/dev/nfs rootwait init=${init} loglevel=${loglevel} nfsroot=192.168.1.168:/home/wu/buildroot/nfs_root ip=192.168.1.11:192.168.1.168:192.168.1.1:255.255.255.0::eth0:off
启动 : boot
- 成功启动文件系统
Welcome to Buildroot
wu login: [ 15.150068] eth0: no IPv6 routers present
Welcome to Buildroot
wu login: root
login[221]: root login on 'console'