通过 NFS 挂载
通过以太网有线连接,开发板使用虚拟机上的根文件系统。
好处:
Linux 内核支持 NFS 服务
进行驱动、应用程序开发时,直接在虚拟机上开发,不用传来传去,开发效率比较高。等功能完全开发好了,再把根文件系统烧录进去。
BusyBox
下载地址:Index of /downloads (busybox.net)
这里用最新版 1.37.0
步骤
(1)修改 Makefile
ARCH ?= arm
CROSS_COMPILE ?= /Dev-Tools/Tool-Chain/IMX6ULL/gcc-linaro-4.9.4/bin/arm-linux-gnueabihf-(2)
make defconfig(3)
make menuconfig1、
选择动态编译,默认就是这个,说是静态编译会导致DNS问题,不确定。
-> Settings
-> Build static binary (no shared libs)
2、mdev
-> Linux System Utilities
-> mdev (16 kb) //确保下面的全部选中,默认都是选中的
3、
开启
vi-style line editing commands
4、开启unicode以支持中文
-> Settings
-> Support Unicode //选中
-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中5、
-> Linux Module Utilities
-> Simplified modutils 不要选择
(4)编译
make放到NFS中
make install CONFIG_PREFIX=/opt/Linux_Workspace/i.MX6ULL/rootfs_nfs_workspace完善根文件系统
创建其它文件夹
mkdir -p dev proc mnt sys tmp root etc/init.d添加 lib 库
mkdir -p /opt/Linux_Workspace/i.MX6ULL/rootfs_nfs_workspace/lib
mkdir -p /opt/Linux_Workspace/i.MX6ULL/rootfs_nfs_workspace/usr/lib
cd /opt/Linux_Workspace/i.MX6ULL/arm_gcc/arm-linux-gnueabihf/libc/lib
cp *so* *.a /opt/Linux_Workspace/i.MX6ULL/rootfs_nfs_workspace/lib/ -d
cd /opt/Linux_Workspace/i.MX6ULL/arm_gcc/arm-linux-gnueabihf/lib
cp *so* *.a /opt/Linux_Workspace/i.MX6ULL/rootfs_nfs_workspace/lib/ -d
cd /opt/Linux_Workspace/i.MX6ULL/arm_gcc/arm-linux-gnueabihf/libc/usr/lib
cp *so* *.a /opt/Linux_Workspace/i.MX6ULL/rootfs_nfs_workspace/usr/lib/ -d如果出问题,可能拷贝的是软链接,不是真正的文件。
创建初始化文件
/etc/init.d/rcS
/etc/fstab
/etc/inittab
OK了
编译报错解决
libbb/hash_md5_sha.c: In function ‘sha1_end’:
libbb/hash_md5_sha.c:1316:28: error: ‘sha1_process_block64_shaNI’ undeclared (first use in this function)
|| ctx->process_block == sha1_process_block64_shaNI
^
libbb/hash_md5_sha.c:1316:28: note: each undeclared identifier is reported only once for each function it appears in
scripts/Makefile.build:197: recipe for target 'libbb/hash_md5_sha.o' failed
make[1]: *** [libbb/hash_md5_sha.o] Error 1
Makefile:744: recipe for target 'libbb' failed
make: *** [libbb] Error 2
解决:
在Settings中关闭 "SHA1: Use hardware accelerated instructions if possible"
networking/libiproute/iplink.c: In function ‘do_set_can’:
networking/libiproute/iplink.c:454:35: error: ‘IFLA_CAN_TERMINATION’ undeclared (first use in this function)
addattr_l(&req.n, sizeof(req), IFLA_CAN_TERMINATION, &val, sizeof(val));
^
networking/libiproute/iplink.c:454:35: note: each undeclared identifier is reported only once for each function it appears in
scripts/Makefile.build:197: recipe for target 'networking/libiproute/iplink.o' failed
make[1]: *** [networking/libiproute/iplink.o] Error 1
Makefile:744: recipe for target 'networking/libiproute' failed
make: *** [networking/libiproute] Error 2
IFLA_CAN_TERMINATION 是 Linux 内核 4.18 才引入的 netlink 属性,用于设置 CAN 总线的终端电阻。 如果你用的 内核比较老(比如 4.14 甚至更早),内核头文件里就没有这个宏。 但你用的 BusyBox 版本比较新,它的 ip 工具实现里调用了这个新宏,于是编译失败。
解决:networking/libiproute/iplink.c
case ARG_termination: {
// uint16_t val;
NEXT_ARG();
// val = get_u16(*argv, keyword);
#ifdef IFLA_CAN_TERMINATION
addattr_l(&req.n, sizeof(req), IFLA_CAN_TERMINATION, &val, sizeof(val));
#endif
break;
}让 busybox 支持中文
从 busybox1.17.0 以上之后,对 ls 命令不做修改是无法显示中文的。
就算是内核设置了支持中文的话, 在 shell 下用 ls 命令也是无法显示中文的,这是因为 busybox1.17.0 以后版本对中文的支持进行了限制。
要想让 busybox1.17.0 以上支持中文,需要修改 libbb/printable_string.c 和 libbb/unicode.c 文件。