前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >08.构建根文件系统

08.构建根文件系统

作者头像
嵌入式与Linux那些事
发布2021-05-20 15:06:16
1.9K0
发布2021-05-20 15:06:16
举报

 终于自动挂载文件系统成功了!!!出错的地方两个!!!   第一,恢复出厂设置一定要用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即可加载驱动。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.配置编辑busybox
  • 2.创建dev目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档