嵌入式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根文件系统 的相关文章

  • GD32F310 (一) LED 点灯

    作者 小飞虫科技 淘宝 首页 小虫飞科技 淘宝网 taobao com 开发板 GD32F3X0系列 使用引脚为 PB4 初始化LED void LED Init void enable the led clock rcu periph c
  • coreutils-stty 初始设置和echo 16进制modBus数据至串口

    安装USB串口驱动 注 我所使用的USB serial芯片为pl2303 个人根据自己不同的芯片安装对应驱动 kmod usb serial pl2303 串口 dev ttyUSB0 配置 其中 F 指定端口 cs8表示8位 parenb
  • 使用嵌入式linux完全手册光盘的arm-linux-gcc 遇到问题 自己编译

    Redhat9下重新生成交叉编译器gcc 3 4 5 glibc 2 3 6 看到论坛上有兄弟也遇到 arm linux gcc lib tls libc so 6 version GLIBC 2 4 not found required
  • QT基础学习(12)---事件过滤

    文章目录 事件过滤 一 事件过滤 实现该功能的方法就是在目标部件 自定义的图片显示部件 上注册事件过滤器 此时的事件过滤器就是我们所说的监视对象 完成这些步骤之后 当目标部件有事件产生后 首先会传递给监视对象 事件过滤器 进行处理而不是该事
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • 一张图深度解析Linux共享内存的内核实现

    一张图深度解析Linux共享内存的内核实现 Sailor forever sailing 9806 163 com http blog csdn net sailor 8318 article details 39484747 PDF版本下
  • stm32USB之模拟U盘

    STMF0 W25Q32模拟U盘 1 第一次写博客 如有错误 请及时指正 如有表达不通顺的地方 敬请谅解 2 本篇文章主要描述如何使用STM32cube配置USB 使用的主控为STM32F072 Flash为W25Q32 使用的主控RAM只
  • firmware-mod-kit工具安装和使用说明

    一 firmware mod kit工具的安装 firmware mod kit工具的功能和binwalk工具的类似 其实firmware mod kit工具在功能上有调用binwalk工具提供的功能以及其他的固件解包工具的整合 下载fir
  • main.c(31): warning: #223-D: function “uart_init“ declared implicitly

    Keil5编程之warning 223 D function xxx declared implicitly 1 函数没有头文件中进行声明 在头文件中添加声明 2 定义错误 字母大小可能不一致 仔细看一下出现问题的函数是否在声明和调用时使用
  • 基于STM32F4单片机对步进电机的控制(有代码)

    步进电机简介 步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件 又称为脉冲电机 在驱动电源的作用下 步进电机受到脉冲的控制 其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比 步进电机每接收一个电脉冲 转
  • 通过External Tools在STM32CubeIDE下使用DAP-LINK

    目录 一 文章背景 二 准备工作 2 1 Stm32CubeIDE 2 2 DAP LINK 2 3 STM32目标板 三 配置过程 3 1 连接目标板 3 2 配置仿真器 3 3 更改调试设置为远程调试 3 4 新建OpenOcd扩展工具
  • 在vmware里面看不到已经设置的共享文件夹

    查看你是否设置了共享文件夹 vmware hgfsclient 在上图的虚拟机点击安装vmware tools 之后会在vmware tools文件里面有一个压缩的文件 把它复制到自己创的文件夹并解压 自己创建文件夹使用mkdir p mo
  • 内存管理实验

    内存管理 1 介绍 内存管理 是指软件运行时对计算机内存资源的分配和使用的技术 其最主要的目的是如何高效 快速的分配 并且在适当的时候释放和回收内存资源 内存管理的实现方法有很多种 他们其实最终都是要实现 2 个函数 malloc 和 fr
  • 步进电机基础(5.6)-步进电机的驱动与控制-闭环控制

    步进电机基础 5 6 步进电机的驱动与控制 闭环控制 前言 基本信息 前言说明 5 6 闭环控制 前言 基本信息 名称 描述说明 教材名称 步进电机应用技术 作者 坂本正文 译者 王自强 前言说明 根据我读的 步进电机应用技术 这本书 进行
  • 毕业设计 STM32人体红外测温枪温度采集系统 - 单片机

    文章目录 1 前言 2 主要器件 3 实现效果 4 设计原理 MLX90614 红外温度传感器 5 部分实现代码 6 最后 1 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求
  • 属性,服务,事件

    属性 即设备支持的可读和 或可设置的参数功能 以一个灯为例 灯的开关就可以定义为一个属性 用户可以读取该属性的当前数值来得知灯的开关状态 也可以通过对该属性进行设置来打开或者关闭这个灯 服务 如果设备的某个功能只能设置 不能获取 那么可以将
  • Oracle块损坏处理(MOS)

    处理 Oracle 块损坏 文档 ID 1526911 1 适用于 Oracle Database Enterprise Edition 版本 7 0 16 0 到 11 2 0 2 0 发行版 7 0 到 11 2 本文档所含信息适用于所
  • 面经——小米面经(2021春招)

    摘自 小米面经 2021春招 感谢小米 感谢雷总 感谢上官可编程 作者 阿波罗啦啦啦啦 发布时间 2021 05 01 11 08 41 网址 https blog csdn net weixin 44933419 article deta
  • 32位的Ubuntu16.04安装QT5.8,并编译实现window环境下的代码

    开始 这是本人的第一篇博客 自己经常在网上找问题的解决方法 发现有些问题很难找到合适的解决方法 所以自己也写写 希望能帮助到大家 有错的地方大家指出 安装环境 linux环境 Ubuntu16 04 32位系统 使用apt get命令进行安
  • Java的引用类型有几种?区别是什么?

    nbsp Java的引用类型有几种 区别是什么 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Java的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评论区回复 888 之后私信回复

随机推荐

  • 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