嵌入式Linux构建yaffs根文件系统

2023-11-17

嵌入式Linux构建yaffs根文件系统

开发环境说明:


(一)编译busybox

解压并进入:

tar xvf busybox-1.13.0.tar.bz2
cd busybox-1.13.0

加载默认配置:

make defconfig

打开图形配置:

make menuconfig

使用静态编译并且指明交叉编译器:

 Busybox Settings  ---> 
		Build Options  ---> 
			[*] Build BusyBox as a static binary (no shared libs)  # 指明使用静态编译
			(arm-linux-) Cross Compiler prefix  # 指明交叉编译器
		Busybox Library Tuning  ---> 
			[*] Username completion  # 控制台显示完整用户名
			[*] Fancy shell prompts  # shell信息提示
Networking Utilities  --->
	[ ] ip tunnel  # 关闭ip隧道,要不然编译会出错

编译并安装:

make && make install

编译完成并安装后在当前目录下的_install文件夹。

(二)构建yaffs2文件系统

创建yaffs2文件系统目录:

mkdir yaffs2
cd yaffs2

创建文件系统所需的一级目录:

mkdir dev etc home lib mnt opt proc root sys tmp var usr

创建必要的二级目录:

mkdir usr/lib usr/share etc/rc.d var/lib var/lock var/run var/tmp

拷贝busybx相关文件:

cp -rf /opt/embeded/busybox-1.13.0/_install/* ./

拷贝库文件:

cp /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* ./lib/ -a

拷贝主机etc目录下的必要文件:

cp /etc/passwd /etc/group /etc/shadow ./etc

拷贝busybox的示例配置文件:

cp /opt/embeded/busybox-1.13.0/examples/bootfloppy/etc/* ./etc/ -rf

在etc目录下创建用于支持热拔插设备的节点配置文件mdev.conf

touch etc/mdev.conf

创建两个设备节点文件。
①由于内核执行到mdev时还没有构建dev目录,如果没有创建/dev/console就会打印警告Warning: unable to open an initial console;②内核启动过程中会将一些垃圾信息丢弃,此时就需要/dev/null设备。

mknod dev/console c 5 1
mknod dev/null c 1 3

系统启动过程中的必要配置文件修改:
系统启动过程中bootloader会传递参数 init=/linuxrc给内核main函数,所以在文件系统挂载后第一个执行的程序是linuxrc,该文件是busybox的链接文件,也就说系统启动挂载文件系统后执行的第一个程序是busybox,busybox首先解析文件/etc/inittab,这个文件指明了接下来要启动哪些程序。

修改文件etc/initab:

该文件初始内容如下:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

文件内容说明:inittab文件中每一个条目用来定义一个子进程,并确定他的启动方法。
第一条带有sysinit字段,表示系统启动后最先执行rcS文件并且只执行一次。
第二条带有respawn字段,表示直接运行-/bin/sh,无需输入用户名和密码
第三条带有askfirst字段,表示init进程先输出‘Please press Enter to actvie this console’,等待用户输入回车后在启动-/bin/sh,tty2是/dev目录下的串口设备文件,需要根据实际进行修改。
第四条表示按下快捷键ctrl+alt+delete时卸载所有设备

注意:第二条和第三条只能任选其一。

我们将该文件改为:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
# ttySAC0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

解析完毕inittcb文件后,接下来就是运行/etc/init.d/rcS这个脚本文件了,修改该文件如下:

#!/bin/sh

# shell命令的搜索路径
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# 运行等级是单用户模式
runlevel=S

# 前一个等级为N表示没有前一个级别
prevlevel=N

# 权限位掩码
umask 022

# 将以上设置导出到环境中
export PATH runlevel prevlevel

# 指明了在shell中的提示符:[root@tq2440/]#
/bin/hostname tq2440

# 将文件/etc/fstab中指明的文件系统挂载到对应挂载点上
mount -a

# 如果目录pts不存在则创建
mkdir -p /dev/pts

# 从内存挂载一个虚拟的文件系统,作用是可以了解目前远程虚拟终端(telnet,ssh等)的基本情况
mount -t devpts devpts /dev/pts

# 使用mdev处理内核的热拔插事件
echo /sbin/mdev > /proc/sys/kernel/hotplug

# 建立dev目录,扫描/sys/class和/sys/block下所有块设备目录,如果在扫描到设备文件含有dev且文件中包含的时设备号,利用这些信息在/dev目录下创建设备节点文件
mdev -s

# 更新环境变量
source /etc/profile

修改/etc/mdev.conf文件内容如下:

sd[a-z]*[0-9]		0:0	0660	@(mount -t vfat -o iocharset=cp936 /dev/$MDEV /mnt/udisk)
sd[a-z]*[0-9]		0:0	0660	*(umount /mnt/udisk)
mmcblk[0-9]*p[0-9]	0:0	0660	@(mount -t vfat -o iocharset=cp936 /dev/$MDEV /mnt/sd)
mmcblk[0-9]*p[0-9]	0:0	0660	*(umount /mnt/sd)

修改/etc/fstab文件内容如下:

#device		mount-point	type	options		dump	fsck order
proc		/proc		proc	defaults		0	0
none        /tmp        ramfs   defaults        0   0
sysfs		/sys		sysfs	defaults		0	0
mdev		/dev		ramfs	defaults		0	0

修改/etc/profle文件内容如下:

# /etc/profile: system-wide .profile file for the Bourne shells

echo
echo -n "Processing /etc/profile... "

# 这条命令的意思是设置core文件大小为0,输出信息以及错误信息都不输出在显示器上。
#ulimit -S -c 0 > /dev/null 2>&1

# 获取用户名
USER="`id -un`"

# 登陆显示名
LOGNAME=$USER

# 在shell下的显示格式[root@tq2440 /]# 
PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "

# 加载环境变量
PATH=$PATH

# 主机名
HOSTNAME=`/bin/hostname`

# 导出到环境变量
export USER LOGNAME PS1 PATH

echo "Done"
echo

在用户登陆时系统会在/etc下寻找三个文件:passwd、shadow、group用来匹配相关信息。

修改/etc/passwd,只保留root、daemon和bin这三行:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

修改/etc/shadow,只保留root、daemon和bin这三行:

root:$6$EfJ5aZ0U$7GfeBkv0vfZj2pIQhoxc1HEpObTI2IA0jo57DJLIQkCNMkIsxbCKSXlr5Utnyp58uN70i.dN41J7kQb/fXsck/:17850:0:99999:7:::
daemon:*:16273:0:99999:7:::
bin:*:16273:0:99999:7:::

修改/etc/group,只保留root、daemon和bin这三行:

root:x:0:
daemon:x:1:
bin:x:2:

到此根文件系统yaffs2制作完毕!

使用如下命令创建文件系统镜像:

mkyaffs2image yaffs2 yaffs2.bin

然后下载到NAND存放文件系统所在的分区就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式Linux构建yaffs根文件系统 的相关文章

随机推荐

  • ios 无法发起ajax请求,PhoneGap的iOS的Ajax请求无法完成(Phonegap iOS ajax request

    请阅读更新这个答案在底部 原来的答案 我已经找到了问题所在 并设法得到基本的认证工作 问题是 Web服务器期待基本身份验证的细节与请求一起发送先发制人 要做到这一点使用 头 的jQuery AJAX的特性如下图所示 ajax type GE
  • 【debug】error: subprocess-exited-with-error

    在安装Python的某个三方包时 出现了下面的报错方式 error subprocess exited with error 解决办法 解决方案重新安装importlib metadata pip install importlib met
  • 经典面试题-大厂SQL题目

    1 如何用一个SQL找出部门下所有员工的平均工资大于某个数 例如20000元 的所有部门 正确答案 select depno avg sal as avgsal from emp group by depno having avgsal g
  • 使用python编写脚本测试目标主机的TCP端口连通性

    使用Python的Socket模块的connect 函数来尝试连接目标主机的特定端口 如果连接成功 则说明该端口是打开的 否则 该端口是关闭的 下面是一个示例脚本 可以检测目标IP的22端口是否开启 import socket def ch
  • 【c++】类模版

    1 类模板语法 类模板作用 建立一个通用类 类中的成员 数据类型可以不具体制定 用一个虚拟的类型来代表 语法 template
  • 市场监管总局关于对锂离子电池等产品实施强制性产品认证管理的公告

    按照 国务院办公厅关于深化电子电器行业管理制度改革的意见 国办发 2022 31号 有关要求 市场监管总局决定对电子电器产品使用的锂离子电池和电池组 移动电源以及电信终端产品配套用电源适配器 充电器 以下统称新纳入产品 实施强制性产品认证
  • 树莓派安装卸载软件命令apt-get

    apt get命令用法 1 安装软件 apt get install 软件名 2 卸载软件但不删除配置 apt get remove 软件名 3 卸载软件并且删除相关配置 apt get purge 软件名 4 更新数据库 apt get
  • Python简单的用户交互

    death age 80 name input your name input 接受的所有数据都是字符串 即便你输入的是数字 但依然会被当成字符串来处理 age input your age print type age int integ
  • TS复习----TS中的接口

    目录 概念 属性接口 函数类型接口 可索引的类型 类类型接口 接口继承 概念 接口的作用 在面向对象编程中 接口是一种规范的定义 他定义了行为和动作的规范 在程序设计里面 接口起到了一种限制和规范的作用接口定义了某一批类所需要遵守的规范 接
  • windos怎么查看oracle进程,怎么样查看哪个进程使用了哪个CPU

    1 在系统维护的过程中 随时可能有需要查看 CPU 使用率 并根据相应信息分析系统状况的需要 在 CentOS 中 可以通过 top 命令来查看 CPU 使用状况 运行 top 命令后 CPU 使用状态会以全屏的方式显示 并且会处在对话的模
  • java:方法引用无效-IDEA 社区版 lombok插件报错解决

    IDEA 社区版 lombok插件报错 java 方法引用无效 报错信息1 java 方法引用无效 找不到符号 符号 方法 getId 位置 类 com xxx xxxx className 打开problem面板向上找你就会发现还有一个报
  • 天九共享赋能新基建项目,易保全区块链存证助力应用场景多点开花

    在国家政策的大力扶持下 中国的区块链发展势力愈发迅猛 作为数字经济的基石 区块链技术发挥着重要作用 据数据显示 2020年全球区块链专利累计达到5 14万件 其中中国累计申请了3 01万件 占全球总数的58 同时 近期发布的 北京城市副中心
  • C语言写网络爬虫总体思路

    使用C语言编写爬虫可以实现网络数据的快速获取和处理 适用于需要高效处理海量数据的场景 与其他编程语言相比 C语言具有较高的性能和灵活性 可以进行底层操作和内存管理 适合处理较复杂的网络请求和数据处理任务 但是 使用C语言编写爬虫也存在一些挑
  • 2个不错的通配符比较函数

    近日在和朋友讨论 MaskMatch 时偶得2个不错的算法 函数1 只支持 模糊匹配 速度比采用递归算法的快近2倍 比TMask方法快很多 函数2 完全支持正规表达式 速度于之前的相同 不会正规表达式的朋友慎用 Funtion 1 Chec
  • mysql error1215

    You have a foreign key constraint operating in both directions When you re creating the tables the first to be created w
  • 基于STM32单片机的智能鱼缸的设计

    一 任务简介 本次以STM32F103单片机为核心 设计了一款智能鱼缸 能够实现智能温控 智能换水 智能供氧 智能喂食等功能 利用单片机作为主控制器 使用Keil软件进行程序开发 除STM32F103C8T6最小系统外 系统还包含温度传感
  • 【满分】【华为OD机试真题2023 JS】货币单位换算

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 货币单位换算 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 记账本上记录了若干条多国货币金额 需要转换成人民币分 fen 汇总后输出 每行记录一条金额 金额带有
  • 数仓虚拟化技术:PieCloudDB Database 通过中国信通院 2023 「可信数据库」性能评测的强力支撑...

    可信数据库 是国内首个数据库的评测体系 被业界广泛认可为产品能力重要的衡量标准之一 PieCloudDB Database在该评测中展现出卓越的数据处理速度 稳定性和可扩展性 为用户提供了强大的数据分析和查询能力 6 月 15 16 日 中
  • EF Core Migration 报错:An error occurred using the connection to database ‘‘ on server ‘10.28.253.2‘

    EF Core Migration update database的时候 An error occurred using the connection to database on server 10 28 253 2 问题 在做EF Co
  • 嵌入式Linux构建yaffs根文件系统

    嵌入式Linux构建yaffs根文件系统 开发环境说明 ubuntu1404 i686 天嵌光盘里的交叉编译链 版本4 4 3 busybox 1 13 0 下载地址 https busybox net downloads 一 编译busy