xym-ee
  • 计算机与嵌入式开发学习
  • 1-1.编程基础
    • C 语言
      • C 中的数据
      • C 语言基础
      • 字符输入输出
      • 函数
      • 数组和指针
      • 字符串处理
      • 存储类别
      • 文件 I/O
      • 复杂数据类型
      • 位操作
      • 预处理和 C 库
    • 数据结构和算法入门
    • leetcode 刷算法题
      • 递归与栈
      • 二叉树与递归
      • 回溯问题
      • 动态规划 1
    • 基本工具和使用
      • shell
      • shell 脚本
      • vim 编辑器
      • 命令行数据整理
      • 命令行环境和配置
  • 1-2.计算机系统基础(CSAPP)
    • 1.计算机基础
    • 2.数据的表示
    • 3.加减运算
    • 4.乘除运算
    • 5.程序的表示转换和链接
    • 6.IA32指令
    • 7.过程调用
    • 10.程序的链接
  • 1-3.数字电路、计算机组成
    • 1.数字电路、virtual circuit board
    • 2.计算机组成/steam:Turing Complete
    • 3.微机原理与接口技术(8086)
  • 1-4.计算机网络
    • 1.从浏览器开始
    • 2.协议栈和网卡
    • 3.网络设备
    • 4.运营商、接入网
    • 5.服务器
    • 6.数据返回浏览器
    • socket编程
  • 1-5.操作系统
    • 0.绪论
      • 1.应用视角的操作系统
      • 2.硬件视角的操作系统
      • 3.数学视角的操作系统
      • 4.状态机模型的应用
    • 1.并发
      • 1.并发 bug 的解决思路
      • 2.互斥
      • 3.同步
      • 4.信号量
      • 5.真实并发
      • 6.调试技巧
      • 7.os kernel 实现
    • 2.虚拟化
      • 1.操作系统上的进程
      • 2.进程的地址空间
      • 3.系统调用和unix shell
      • 4.C 标准库的实现
      • 5.linux 操作系统
      • 6.可执行文件和加载
      • 7.动态链接和加载
      • 8.内核的实现
      • 9.fork 的应用
    • 3.持久化
      • 1.存储设备的原理
      • 2.输入输出设备模型
      • 3.设备驱动程序
      • 4.文件系统 API
      • 5.fat 和 unix 文件系统
      • 6.持久数据的可靠性
    • 总结
  • 2-1.嵌入式裸机开发
    • 嵌入式系统通信接口与协议
    • cortex-m 内核芯片裸机开发
    • MPU
  • 2-2.中等规模系统开发
    • LVGL 图形库
    • 裸机开发的软件框架
    • 基于 rtos 开发
  • 2-3.armv7-m架构与 rtos 原理
    • armv7-m 架构
    • rt-thread 内核实现
    • rt-thread 驱动开发
  • 3-1.linux 应用开发基础
  • 3-2.linux 镜像构建
    • uboot 使用
    • uboot 适配
    • uboot 启动分析
    • uboot 自定义命令
    • linux 内核适配
    • linux 内核启动分析
    • busybox 根文件系统构建
  • 3-3.linux 驱动开发
    • 驱动开发基础
    • sysfs
    • led 驱动
    • 设备树
    • pinctrl 和 gpio 子系统
    • 并发控制
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 3-2.linux 镜像构建

busybox 根文件系统构建

上一页linux 内核启动分析下一页3-3.linux 驱动开发

最后更新于11个月前

这有帮助吗?

rootfs

stm32 里要想驱动 sd 卡,需要移植一个 fatfs 文件系统。

这两个不是一个东西。这里的 rootfs 并不是一个代码实现上的东西。

fatfs、ext4、ntfs 这类文件系统类型,在 linux 内核里已经有实现代码了。

这里的根文件系统,根/文件/系统。即 linux 所需要的文件,软件、配置文件、依赖库。

zImage 的内核只有 6M 大小。而 Ubuntu 镜像有 3G,ubuntu 跑的内核也就这么大,其他的都是各种文件。Ubuntu 装好后有各种软件,。

嵌入式 linux 里也需要构建这么一个东西,准备好系统运行需要的东西。

大型的发行版的系统,ubuntu 等,都需要创建对应的根文件系统。一些典型的东西

  • 命令

  • 库

  • 配置文件

bin 中的命令的源码在 可以看到。

在嵌入式领域,常用 busybox,一个可执行文件整合了大部分的基础工具。在这个工具的基础上,可以做更多的事情。

此外还有 buildroot、yocto,相当完善的。

nfs 挂载

root=/dev/nfs nfsroot=10.0.0.10:/home/xym/ws_linux/rootfs,proto=tcp rw
ip=10.0.0.11:10.0.0.10:10.0.0.1:255.255.255.0::eth0:off

启动参数

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=10.0.0.22:/home/xym/ws_linux/rootfs,proto=tcp,nfsvers=3 rw ip=10.0.0.11:10.0.0.22:10.0.0.1:255.255.255.0::eth0:off'
setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs nfsroot=10.0.0.22:/home/m/nfs/rootfs,proto=tcp,nfsvers=3 rw ip=10.0.0.11:10.0.0.22:10.0.0.1:255.255.255.0::eth0:off' 

uboot 有比较强的容错能力,可能首选非从 nfs 挂载,遇到这种情况,手动写死 bootcmd

setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-mini.dtb; bootz 80800000 - 83000000;'
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 80800000 - 83000000;'

测试和完善

系统启动后

[    8.622515] VFS: Mounted root (nfs filesystem) on device 0:14.
[    8.630672] devtmpfs: mounted
[    8.634627] Freeing unused kernel memory: 528K (80b48000 - 80bcc000)
can't run '/etc/init.d/rcS': No such file or directory

Please press Enter to activate this console. 

提示 kernel(先笼统的这么讲) 想运行一个东西,但是没有。事实上这是个脚本,我们自己创建就好了。

kernel 启动后需要启动一些服务, /etc/init.d/rcS 脚本里启动了一些东西。

coreutils