busybox的源码可以在官网https://www.busybox.net/downloads/下载.
这里下的版本是busybox-1.27.2.tar.bz2
解包后,在终端进入busybox-1.27.2目录下操作:
配置busybox
make menuconfig CROSS_COMPILE=aarch64-linux-gnu-
//备注: 在出现的配置界面里,按"/"键可查找所需命令的选项位置.
Busybox Settings --->
[*] Build BusyBox as a static binary (no shared libs) //选上这项,表示静态编译.
(./_install) BusyBox installation prefix (NEW) //这里不用改,在"make install"时,就会安装到当前目录下的_install目录里
保存退出后, 执行"make CROSS_COMPILE=aarch64-linux-gnu-"进行编译.
最后执行"make install CROSS_COMPILE=aarch64-linux-gnu-"把编译出来的命令安装到./_install
以上步骤完成后,可以查看编译出来的命令是否正确:
file ./_install/bin/busybox
输出的信息:
busybox: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, for GNU/Linux 3.7.0, BuildID[sha1]=511ce91c77ecd799f7d5ad1c9b3414f92b49ed9e, stripped
在_install目录里,创建系统所需的目录及文件:
mkdir dev proc sys tmp var mnt
mkdir var/log
mkdir var/lock
mkdir var/lib
mkdir var/run
创建etc/init.d/rcS文件(用于进文件系统后的初始化工作, 相当于PC上的/etc/rc.local)
mkdir etc/init.d -p
touch etc/init.d/rcS
修改etc/init.d/rcS, 增加以下内容, 指定目录使用指定的文件系统类型格式
mount -t proc none /proc
mount -t sysfs none /sys
mount -t tmpfs none /tmp
mount -t ramfs none /dev
mdev -s #让mdev自动根据相应的驱动产生相应的设备文件
syslogd #产生日志的守护进程
echo /sbin/mdev > /proc/sys/kernel/hotplug #当硬件驱动有变化时, 调用mdev -s产生或移除相应的设备文件
创建etc/inittab文件, 增加以下内容:
::sysinit:/etc/init.d/rcS #用rcS作系统初始化
ttyS0::askfirst:-/bin/sh #使用ttyS0作板子的控制终端
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
创建etc/profile文件, 增加以下内容
export PS1="^_^ \w # " //用于命令行前面的提示符
以上做完以后, 还需要给整个文件系统所有目录及文件设置权限:
chmod 0777 * -R
把busybox编译得到的文件系统放入sd卡的ext4分区里.
先在终端下进入_install目录里,打包整个文件系统:
tar cf fs.tar * //注意一定是要在_install目录下
然后把sd接入pc, 如我的ext4分区(sdb2)自动持载到/run/media/jk/ROOTFS目录下:
tar xf fs.tar -C /run/media/jk/ROOTFS //把系统包解包到分区的挂载目录里
umount /run/media/jk/ROOTFS //完成后,反挂载sd卡并接回板上
重接回sd卡到板上,启动到uboot时设置内核进入内存文件系统后再进入sd卡上的ext4分区里的文件系统:
//在uboot启动到倒计时,按任意键停住,设置环境变量:
setenv bootargs "root=/dev/mmcblk0p2 console=ttyS0,115200"
saveenv
//注意mmcblk0p2就是对应前面在pc上的sdb2, console=ttyS0是让内核使用板上的uart0作调试口使用
保存环境变量后:
run bootcmd //执行bootcmd环境变量里的命令,启动系统
进入initramfs系统后会自动再进入sd卡的文件系统。
第一进入时,initramfs系统会整理sd卡上的分区,启动较慢,但以后再进入时不会再作整理操作的.
进入sd文件系统后,就可以通过板上的有线网卡和网线连接pc了。
先设置pc上的网卡的板上的eth0网卡的ip地址是同一网段,通过ping测试网络连通后,就可以访问pc上的nfs共享目录了.
如pc机的ip地址: 192.168.1.10 nfs共享目录: /disk3/share
则在板子上挂载: mount 192.168.1.10:/disk3/share /mnt -o nolock,tcp