08.构建根文件系统

2021-05-20 15:06:16 浏览数 (1)

 终于自动挂载文件系统成功了!!!出错的地方两个!!!   第一,恢复出厂设置一定要用eop下载uboot,dnw下载的不行!!!最后记得erase nand params!!   第二,set bootargs noinitrd root=/dev/nfs nfsroot=202.193.61.195:/work/nfs_root/first_fs ip=202.193.61.196:202.193.61.195:202.193.61.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 参数解读:  nfsroot=202.193.61.195: ubuntu ip地址  /work/nfs_root/first_fs要挂载的目录  ip=202.193.61.196: 单板ip(恢复出厂设置后记得先配置ip,手动挂载下能不能成功,可以成功的话再修改bootargs自动挂载!)  202.193.61.195: 依然是ubuntu ip !!!!!注意!!!  202.193.61.1: 网关,只要处于同一网段就好。  255.255.255.0:: 子网掩码  eth0: 网卡,一般都是0  off 是否自动配置 off就可以

下面回顾下整个过程!

最小根文件系统的组成:1.dev/console /dev/null 2.init程序(来源busybox)3./etc/inittab 4.配置文件指定的应用程序 5.C库

1.配置编辑busybox

 (1)将busybox-1.7.0.tar.bz2文件上传到ubuntu中work/system,使用tar xjf busybox-1.7.0.tar.bz2解压,查看install文件,

 (2)在busybox-1.7.0文件夹下中使用make menuconfig 配置busybox(其实什么都不用改),直接退出。  (3)编译之前,先修改 Busybox根目录的 Makefile,使用交叉编译器。  修改前:

代码语言:javascript复制
175 ARCH?=$(SUBARCH)
176 CROSS COMPILE ?=

 修改后:

代码语言:javascript复制
175 ARCH?= arm
176 CROSS COMPILE ?= arm-linux-

 (4)执行make命令编译。 报错

解决: a.修改busybox-1.7.0 顶层Makefile 405行: config%config: scripts_basic outputmakefile FORCE 改为: %config:scripts_basic outputmakefile FORCE

b.修改busybox-1.7.0 顶层Makefile 1242行: /%/: prepare scripts FORCE 改为: %/:prepare scripts FORCE 报错: scripts/kconfig/Makefile:14: recipe for target ‘menuconfig’ failed

解决: sudo apt-get install libncurses5-dev libncursesw5-dev  (5)执行mkdir -p /work/nfs_root/first_fs创建first_fs文件夹。使用make CONFIG_PREFIX=/work/nfs_root/first_fs install安装到first_fs文件夹中。安装完成,使用ls命令查看,已经有了一些文件夹。bin下面的ls指向busybox的链接。

2.创建dev目录

 (1)在busybox-1.7.0文件夹下使用 vi Makefile打开Makefile,找到交叉编译工具链,设置为CROSS_COMPILE__?=arm-linux-,之后保存退出。   (2)在ubuntu下创建目录/work/nfs_root/first_fs,使用ls /dev/console /dev/null -l命令查看主设备号和次设备号

  (3)在first_fs目录下使用mkdir dev命令创建dev文件夹,进入dev文件夹中是要用sudo mknod console c 5 1和sudo mknod null c 1 3命令申请设备文件,之后在dev文件夹下ls -l就可以看到我们创建的设备文件。

 (4)在first_fs文件夹下使用mkdir etc创建目录,vi /etc/inittab打开inittab文件,加入console::askfirst:-/bin/sh和::sysinit:/etc/init.d/rcS。 拷贝C库,执行以下命令

代码语言:javascript复制
mkdir -p /work/nfs_root_first_fs/lib
cd /usr/local/arm/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
cp *.so* /work/nfs_root/first_fs/lib -d

在first_fs目录下创建脚本文件,mkdir etc/init.d,然后vi etc/init.d/rcS,在rcS文件中加入mount -t proc none /proc。加上可执行属性,chmod x etc/init.d/rcS。之后ls查看创建的proc。

 (5)文件系统一烧进板子,启动的时候就会执行 etc/init.d/rcS 中的mount -t proc none /proc。 也可以使用mount -a命令挂载根文件系统。使用vi etc/init.d/rcS打开文件,注释掉之前的脚本内容,加入mount -a。mount -a会依赖于文件etc/ fstab,在fstab中加入 proc /proc proc defaults 0 0。mount -a命令根据fstab的内容去挂载文件系统。

 (6)使用mkyaffs2image first_fs first_fs.yaffs2制作yaffs映像文件(这里略过)。具体参考嵌入式linux开发完全手册371页或者韦东山衔接视频第十一课第四节6min中处。  (7)进入开发板的文件系统之后,使用cat /proc/mounts查看挂在了那些文件系统。

udev机制 自动创建dev目录下的设备节点 busybox中有mdev。打开mdev.txt。步骤如下

在first_fs中 mkdir sys。在first_fs下使用vi etc/fstab打开文件(参考linux应用开发手册370页!!!认真看!!!少了那个都不行),加入  sysfs /sys sysfs defaults 0 0  tmpfs /tmp tmpfs defaults 0 0  tmpfs /dev tmpfs defaults 0 0。 打开etc/init.d/rcS,加入   mkdir /dev/pts  mount -t devpts devpts /dev/pts  echo /sbin/mdev > /proc/sys/kernel/hotplug  mdev -s 之后制作yaffs2映像文件,烧写到板子。

烧写fs_mini.yaffs2后,在板子文件系统中配置ip,ifconfig etn0 202.193.61.1,处于同一网段,ping 通服务器即可

下面重头戏!!!!! 手工挂接根文件系统!!! 挂接NFS条件:  1.服务器允许目录可被别人挂接。在first_fs目录下sudo vi /etc/exports,打开配置文件,加上要挂接的目录

 重启nfs服务 sudo /etc/init.d/nfs-kernel-server restart 之后,在服务器上自己挂接自己,sudo mount -t nfs 202.193.61.195:/work/nfs_root/first_fs /mnt。没有报错表明挂载成功。  2.单板去挂接  从flash上启动根文件系统,再用命令挂接NFS。先使用mkdir /mnt创建目录,使用mount -t nfs -o nolock 202.193.61.195:/work/nfs_root/first_fs /mnt(注意,要先修改开发板ip,ifconfig临时修改。永久修改方法?)

 挂载成功如图所示。/mnt目录下的和服务器上的内容一样。  直接从nfs启动,修改set bootargs noinitrd root=/dev/nfs nfsroot=202.193.61.195:/work/nfs_root/first_fs ip=202.193.61.196:202.193.61.195:202.193.61.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 重启 就可以

编译驱动文件  在ubuntu下建立文件夹并进入work/drivers_and_test/first_drv,将pc机上写好的.c文件放入。使用make命令编译。成功后会有.ko文件生成。

代码语言:javascript复制
/*编译驱动程序依赖于内核,下面是内核的目录。编译驱动之前要先编译内核*/
KERN_DIR = /work/system/linux-2.6.22.6
/*make -C 目录,表示进入目录当中使用makefile编译。*/
all:
	make -C $(KERN_DIR) M=`pwd` modules 

clean:
	make -C $(KERN_DIR) M=`pwd` modules clean
	rm -rf modules.order

obj-m	 = first_drv.o

 在单板文件系统中看到的文件和ubuntu中的一样。

 首先使用cat /proc/devices查看当前的设备

 使用insmod first_drv.ko即可加载驱动。

0 人点赞