根文件系统(rootfs)的制作

 


由于板子不知道什么缘故,u-boot的tftp功能无法应用,每次都用串口下载数据,但是到后面要下载文件系统的时候实在是太大了,完全无法下载,因此,尝试着做一个简单的文件系统,这个样子就能够跑起来了。

根文件系统首先是一种文件系统,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂在的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在跟文件系统挂载之后从中把一些基本的初始化脚本和服务加载到内存中去运行。

我们都说用busybox来制作根文件系统,那么busybox到底是什么?

busybox其实就是集成压缩了linux的许多工具和命令


下面就开始进行移植

1、创建必要的跟文件系统目录

根文件系统(rootfs)的制作_第1张图片

2、创建控制台设备文件和null设备文件

命令如下所示

根文件系统(rootfs)的制作_第2张图片

3、安装必要初始化文件

将etc.tar.gz解压到 rootfs,如下所示


4、配置busybox

首先解压busybox包,然后进去busybox目录执行make menuconfig,如下所示

进入busybox settings->build options选上“build busy as a static  binary ”


5、安装busybox

make install

注意,我们后面在测试helloworld的时候,如果此处选择了静态链接库,那么我们在编译helloworld等程序的时候也只能使用静态链接方式编译,即arm-linux-gcc -static -o hellowrold helloworld.c,如果我们此处选择动态链接方式,即使将库文件拷贝进去也是不行的。但是,我们选择静态编译的话,像一个helloworld编译出来都有50M的大小,因此,肯定静态编译方法是不行的,我们得选择动态编译方式。

那么此处我们不勾选,就选择busybox动态库方式,操作方法如下:

1、将交叉编译器的动态库文件拷贝到busybox安装后的目录的lib下面,如下所示

 cp /opt/toolchains/arm-jyxtec-linux-gnueabi/arm-jyxtec-linux-gnueabi/lib/*so* lib/ -a//注意,加选项a,拷贝所有的包括连接文件

 

安装1.20.2错误解决方法:

1、找不到curses.h文件

      该文件是linux下面的一个库文件,因此,查看linux下面是否有该文件,如centos的 yum list *curses*

      安装方法: yum instal curses*

2、arm-linux-gcc找不到

 

[root@ruanbinxin busybox-1.13.3]# make
/home/ruanbinxin/mini2440/busybox-1.13.3/scripts/gcc-version.sh: line 11: arm-linux-gcc: command not found
  SPLIT   include/autoconf.h -> include/config/*
  GEN     include/bbconfigopts.h
/home/ruanbinxin/mini2440/busybox-1.13.3/scripts/gcc-version.sh: line 11: arm-linux-gcc: command not found
  HOSTCC  applets/usage
  GEN     include/usage_compressed.h
  HOSTCC  applets/applet_tables
  GEN     include/applet_tables.h
  CC      applets/applets.o
/bin/sh: arm-linux-gcc: command not found
make[1]: *** [applets/applets.o] 错误 127
make: *** [applets] 错误 2
[root@ruanbinxin busybox-1.13.3]#

原来是之前安装的4.4.3交叉编译器忘生效了,执行source /etc/profile后,再执行arm-linux-gcc -v查看是否为自己安装的交叉编译器版本,错误就解决。

    再次执行make,虽然编译成功通过,但在很多文件中都出现一大堆警告提示:


你可能感兴趣的:(Linux)