imx6ull制作根文件系统

开发板为韦东山老师的imx6ull开发板。

在/home/book/nfs_rootfs/下创建一个文件夹:

使用tar指令解压busybox-1.31.1

tar -vxfj busybox-1.31.1.tar.ba2

解压完后内容如下:

1、打开busybox的顶层的Makefile,添加ARCH和CROSS_COMPILE的值

164 CROSS_COMPILE ?= /home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf
......
190 ARCH ?= arm

2、busybox中文字符支持

打开文件busybox-1.31.1/libbb/printable_string.c,修改printab_string函数

第 31 和 32 行,当字符大于 0X7F 以后就跳出去了。
第 45 和 46 行,如果支持 UNICODE 码的话,当字符大于 0X7F 就直接输出‘?’。
所以我们需要对这 4 行代码进行修改,修改以后如下所示:

12 const char* FAST_FUNC printable_string(uni_stat_t *stats, const char
*str)
13 {
14     char *dst;
15     const char *s;
16
17     s = str;
18 while (1) {
......
30     if (c < ' ')
31     break;
32 /* 注释掉下面这个两行代码 */
33 /* if (c >= 0x7f)
34     break; */
35     s++;
36 }
37
38 #if ENABLE_UNICODE_SUPPORT
39 dst = unicode_conv_to_printable(stats, str);
40 #else
41 {
42     char *d = dst = xstrdup(str);
43     while (1) {
44         unsigned char c = *d;
45         if (c == '\0')
46         break;
47         /* 修改下面代码 */
48         /* if (c < ' ' || c >= 0x7f) */
49         if( c < ' ')
50             *d = '?';
51             d++;
52 }
......
59 #endif
60 return auto_string(dst);
61 }

接着打开文件 busybox-1.29.0/libbb/unicode.c,

第 1022 行,当字符大于 0X7F 以后, *d++就为‘?’。
第 1030 和 1031 行,当字符大于 0X7F 以后, *d 也为‘?’。
 

1003 static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t
*stats, const char *src, unsigned width, int flags)
1004 {
1005     char *dst;
1006     unsigned dst_len;
1007     unsigned uni_count;
1008     unsigned uni_width;
1009
1010 if (unicode_status != UNICODE_ON) {
1011     char *d;
1012     if (flags & UNI_FLAG_PAD) {
1013         d = dst = xmalloc(width + 1);
......
1022         /* 修改下面一行代码 */
1023         /* *d++ = (c >= ' ' && c < 0x7f) ? c : '?'; */
1024         *d++ = (c >= ' ') ? c : '?';
1025         src++;
1026         }
1027         *d = '\0';
1028     } else {
1029         d = dst = xstrndup(src, width);
1030         while (*d) {
1031             unsigned char c = *d;
1032             /* 修改下面一行代码 */
1033             /* if (c < ' ' || c >= 0x7f) */
1034             if(c < ' ')
1035                 *d = '?';
1036                 d++;
1037             }
1038         }
......
1044 return dst;
1045 }
......
1047
1048 return dst;
1049 }

3、配置busybox

根我们编译 Uboot、 Linux kernel 一样,我们要先对 busybox 进行默认的配置,有以下几种
配置选项:
①、 defconfig,缺省配置,也就是默认配置选项。
②、 allyesconfig,全选配置,也就是选中 busybox 的所有功能

③、 allnoconfig,最小配置。

我们一般使用默认配置即可,因此使用如下命令先使用默认配置来配置一下 busybox:

make defconfig


busybox 也支持图形化配置,通过图形化配置我们可以进一步选择自己想要的功能,输入
如下命令打开图形化配置界面:
 

make menuconfig

配置路径如下:

Location:
-> Settings
-> Build static binary (no shared libs)

继续配置如下路径选项

Location:
-> Settings
-> vi-style line editing commands

继续配置如下路径配置项:
Location:
-> Linux Module Utilities
-> Simplified modutils

继续配置如下路径配置项:
Location:
-> Linux System Utilities
-> mdev (16 kb) //确保下面的全部选中,默认都是选中的

最后就是使能 busybox 的 unicode 编码以支持中文,配置路径如下:

Location:
-> Settings

-> Support Unicode
-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables

busybox 的配置就到此结束了
4、编译busybox

配置好 busybox 以后就可以编译了,我们可以指定编译结果的存放目录
 

make install CONFIG_PREFIX=/home/book/nfs_rootfs/seocnd_busybox

编译完之后在向second_busybox中添加其他文件:

在second_busybox目录创建lib文件夹

进入 /home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/libc/lib目录下

cp *so* *.a /home/book/nfs_rootfd/second_busybox/lib/ -d

后面的“-d”表示拷贝符号链接,这里有个比较特殊的库文件: ld-linux-armhf.so.3,此库文件也是个符号链接,相当于 Windows 下的快捷方式。会链接到库 ld-2.19-2014.08-1-git.so 上,输入命令“ls ld-linux-armhf.so.3 -l”查看此文件详细信息

ld-linux-armhf.so.3 后面有个“->”,表示其是个软连接文件,链接到文件 ld-2.19-2014.08-1-git.so,因为其是一个“快捷方式”,因此大小只有 24B。但是, ld-linuxarmhf.so.3 不能作为符号链接,否则的话在根文件系统中执行程序无法执行!所以我们需要 ldlinux-armhf.so.3 完成逆袭,由“快捷方式”变为“本尊”,方法很简单,那就是重新复制 ld-linuxarmhf.so.3,只是不复制软链接即可,先将 rootfs/lib 中的 ld-linux-armhf.so.3 文件删除掉,命令
如下:

rm ld-linux-armhf.so.3

然 后 重 新 进 入 到/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/libc/lib目录中,重新拷贝 ld-linux-armhf.so.3,命令如下:

cp ld-linux-armhf.so.3 /home/book/nfs_rootfs/sencond_busybox/lib/

此时 ld-linux-armhf.so.3 已经不是软连接了,而是实实在在的一个库文件.

继续进入如下目录中:

/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/lib

此目录下也有很多的的*so*和.a 库文件,我们将其也拷贝到 second_busybox/lib 目录中,命令如下:

cp *so* *.a /home/book/nfs_rootfd/second_busybox/lib/ -d

向 second_busybox 的“usr/lib”目录添加库文件

/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/libc/usr/lib

将此目录下的 so 和.a 库文件都拷贝到 second_busybox/usr/lib 目录中,命令如下:

cp *so* *.a /home/book/nfs_rootfd/second_busybox/lib/ -d

至此,根文件系统的库文件就全部添加好了,可以使用“du”命令来查看一下 second_busybox/lib 和
second_busybox/usr/lib 这两个目录的大小,命令如下:

du ./lib ./usr/lib/ -sh

创建其他文件夹

在根文件系统中创建其他文件夹,如 dev、 proc、 mnt、 sys、 tmp 和 root 等,
 

根文件系统测试

打开开发板,在开发板倒数的3秒中,随意按下键盘,然后输入

selenv bootargs `console=ttymxc0,115200,root=/dev/nfs nfsroot=192.168.5.11:/home/book/nfs_rootfs/second_busybox ip=192.168.5.9:192.168.5.11:192.168.1.1:255.255.255.0::eth0:off

然后在输入boot。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值