大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
忘了到底前几年看的一篇什么busybox的教程,写的极其复杂,以至于让我这么久以来一直不敢再去碰这个东西,直到今天又再次有了这个需求,特来再搞一次,没想到不到俩小时,一次搞定,将这过程记录下来,以后也好有个参考。
1 环境
宿主机: Ubuntu 18.04
交叉编译工具链: aarch64-linux-gnu-gcc 7.4.0
目标机: Armv8 i.MX 8 EVK board
2 下载
busybox官网下载:https://busybox.net/,我是直接git clone
的最新的1_31_stable
分支
git clone https://git.busybox.net/busybox -b 1_31_stable
3 编译
3.1 make defconfig
3.2 make menuconfig
这里我们的原则是在make defconfig的基础上尽可能少的改动这些config, 要改以下几个地方,括号里的是symbol,方便直接查找:
-> Settings
--- Support --long-options
[\*] Don't use /usr #不要生成usr目录 (CONFIG_INSTALL_NO_USR)
--- Build Options
[\*] Build static binary (no shared libs) #进行静态编译 (CONFIG_STATIC)
--- Installation Options ("make install" behavior)
What kind of applet links to install (<choice> [=y])
(X) as soft-links (CONFIG_INSTALL_APPLET_SYMLINKS)
--- Library Tuning
[\*] Query cursor position from terminal (CONFIG_FEATURE_EDITING_ASK_TERMINAL)
结束,保存一下
3.3 make all
make ARCH=aarch64 CROSS_COMPILE=aarch64-linux-gnu- all
No Error, 必须的
3.4 安装到指定目录
mkdir -p ./installed //创建指定目录
make CONFIG_PREFIX=./installed install //安装到指定目录
在当前目录下会生成一个installed
文件夹,到此我们的编译算是完成了。
4 建立ROOTFS目录结构
(起始路径为busybox的编译根目录,此处文件夹名为busybox)
# mkdir ../rootfs //创建一个rootfs目录
# cd ../rootfs //切换到rootfs目录下
# mkdir dev etc lib usr var proc tmp home root mnt sys
# cd ../busybox/ //切换到busybox目录下
# cp -ra installed/* ../rootfs
# cp -ra examples/bootfloppy/etc/* ../rootfs/etc //把fstab,init.d,inittab,profile拷贝过来,需修改
# cd ../rootfs/etc //切换到rootfs的etc目录下
# cp /etc/passwd . //拷贝宿主机的passwd文件到rootfs的etc目录中,需修改
# cp /etc/group . //拷贝宿主机的group文件到rootfs的etc目录中,需修改
# cp /etc/shadow . //拷贝宿主机的shadow文件到rootfs的etc目录中,需修改
5 修改上面的几个文件
此操作的根文件夹为rootfs文件夹内,目录名为rootfs
5.1 修改inittab
原始文件为:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
修改后为:
---(1):开机免登陆直接进shell
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
---(2):开机需要登陆
::sysinit:/etc/init.d/rcS
::respawn:-/bin/login
5.2 修改profile
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export LD_LIBRARY_PATH=/lib:/usr/lib
/bin/hostname osee
USER="`id -un`"
LOGNAME=$USER
HOSTNAME='/bin/hostname'
PS1='[\u@\h \W]# '
5.3 修改 etc/init.d/rcS
/bin/mount -n -t ramfs ramfs /var
/bin/mount -n -t ramfs ramfs /tmp
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t ramfs none /dev
/bin/mkdir -p /var/tmp
/bin/mkdir -p /var/modules
/bin/mkdir -p /var/run
/bin/mkdir -p /var/log
/bin/mkdir -p /dev/pts //telnet服务需要
/bin/mkdir -p /dev/shm //telnet服务需要
#echo /sbin/mdev > /proc/sys/kernel/hotplug//USB自动挂载需要
/sbin/mdev -s //启动mdev在/dev下自动创建设备文件节点
/bin/mount -a
#######配置网络################################
/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0
/sbin/ifconfig eth0 192.168.1.70
/sbin/ifconfig eth0 netmask 255.255.255.0
/sbin/route add default gw 192.168.1.1 eth0
/sbin/ifconfig eth1 192.168.1.71 netmask 255.255.255.0
/sbin/route add default gw 192.168.1.1 eth1
5.4 修改etc/fstab
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmpfs defaults 0 0
5.6 修改passwd/group/shadow文件,只保留第一行
6 拷贝宿主机的libc到rootfs
# cp -ra /usr/aarch64-linux-gnu/lib/* rootfs/lib/
7 拷贝编译安装内核模块到目标机
make modules
make modules_install INSTALL_MOD_PATH=/rootfs/lib/modules
8 打包
$ cd rootfs
$ find . | cpio -H newc -ov --owner root:root > ../initramfs.cpio
$ cd ..
$ gzip initramfs.cpio
9 解压cpio
$ cpio -idmv < initramfs.cpio
大功告成,快把卡插到目标机开发板上试下吧。
提供一个打包好的riscv64 linux可用的rootfs: https://download.csdn.net/download/wangyijieonline/85235425
提供一个打包好的arm64 linux可用的rootfs:[TBD]
参考文献:
1, 使用BusyBox制作嵌入式Linux根文件系统:https://www.cnblogs.com/Charles-Zhang-Blog/p/3419301.html
2, [Busybox]Busybox制作文件系统:https://www.cnblogs.com/aaronLinux/p/6886424.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184950.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...