前言

本篇继续根据《i.mx6u驱动开发指南V1.6.pdf》梳理根文件系统移植过程。

linux目录含义简介

  • /bin 存放系统的可执行文件,一般都是一些终端命令,比如 ls 、 mv 、touch
  • /dev 存放各种设备文件,比如串口 /dev/tty* 开发板上串口是/dev/ttymxc0
  • /etc 存放各种配置文件
  • /lib 存放库文件,存放不是.c .h源码,而是编译之后的库文件
  • /mnt 临时挂载目录,一般upan都是挂载这这个目录的子目录 /mnt/usb 、/mnt/sd
  • /proc 此目录一般是空的,当 Linux 系统启动以后会将此目录作为 proc 文件系统的挂载点, proc
    是个虚拟文件系统,没有实际的存储设备。 proc 里面的文件都是临时存在的,一般用来存储系
    统运行信息文件
  • /usr 是 Unix Software Resource 的缩写,软件资源目录
  • /sbin 存放用户的可执行命令,只有管理员才能使用,主要是用户管理系统
  • /svs 目录 sysfs 文件系统的挂载点
  • /opt 可选的文件、软件存放区,由用户选择将哪些文件或软件放到此目录中

BusyBox

BusyBox 是一个构建根文件系统的工具,集成了大量的 Linux 命令和工具的软件,像 ls、 mv、 ifconfig 等命令 BusyBox 都会提供。 BusyBox 就是一个大的工具箱,这个工具箱里面集成了 Linux 的许多工具和命令。官网地址为
https://busybox.net/
开发板主要的是1.29.0版本的busybox

编译

1、解压busybox

得到如下目录

2、Makefile添加编译器选项

在顶层Makefile文件下添加如下命令,指定硬件架构及编译器。默认为x86。

3、添加中文支持

修改/libbb/printable_sting.c

;
32 /* 注释掉下面这个两行代码 */
33 // if (c >= 0x7f)
34 // break;
48 /* if (c < ' ' || c >= 0x7f) */ //修改前
49 if( c < ' ')  //修改后

修改/libbb/unicode.c

1023 /* *d++ = (c >= ' ' && c < 0x7f) ? c : '?'; */ //修改前
1024 *d++ = (c >= ' ') ? c : '?';  //修改后1033 /* if (c < ' ' || c >= 0x7f) */ //修改前
1034 if(c < ' ') //修改后

数字代表在对应.c中的行数,避免篇幅过长,就不将需要修改代码的上下文写出来了。

4、配置menuconfig

busybox文件夹下执行make menuconfig。如下图,“y”使能相关功能,“n”失能相关功能,“enter”进入目录。按两次‘Esc’键退出当前菜单。

失能build static binary

->Settings->Build static binary

使能vi
-> Settings-> vi-style line editing commands

失能 simplified modutils
-> Linux Module Utilities -> Simplified modutils

使能mdev
-> Linux System Utilities -> mdev (16 kb) //确保下面的全部选中,默认都是选中的

使能unicode
-> Settings-> Support Unicode
-> Settings-> Support Unicode -> Check $LC_ALL, $LC_CTYPE and $LANG environment variables

5、编译

make

等待执行完成

将编译结果存放到指定目录,一般新建一个rootfs目录

make install CONFIG_PREFIX=/home/alientek/linux/nfs/rootfs

新建的rootfs目录,就是需要烧录到开发板上的根文件系统。

6、添加lib库

在打包烧写之前,需要添加lib库文件。linux下一般都是动态编译。所以编译出来的文件需要调用库文件。静态编译就是将用户程序可库文件统一打包编译为一个可执行文件,这样好处是,执行文件放到其他电脑上可以直接运行,不会出现少库的错误。静态编译的劣势为,编译的可执行文件比较大。
根据以上描述,要使编译的文件能够在开发板上运行,就需要在开发板的系统上添加各种lib库文件。

在rootfs(自己创建的根文件目录)下创建lib文件夹

mkdir lib

拷贝libc/lib到lib

进入如下路径对应的目录:

/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linuxgnueabihf/libc/lib

此目录下有很多的so(是通配符)和.a 文件,这些就是库文件,将此目录下所有的so*和.a
文件都拷贝到 rootfs/lib 目录中,拷贝命令如下:

#“-d”表示拷贝符号链接
cp *so* *.a /home/zuozhongkai/linux/nfs/rootfs/lib/ -d

其中ld-linux-armhf.so.3为软连接,类似于windows下快捷方式,相当于-d只把这个文件的快捷方式拷贝过来了,没有将源文件拷贝过。

所以要先将其删除,然后再将源文件拷贝过来

rm ld-linux-armhf.so.3
#进入如下路径对应的目录:
#/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linuxgnueabihf/libc/lib
cp ld-linux-armhf.so.3 /home/alientec/linux/nfs/rootfs/lib/

拷贝lib到usr/lib
依照上述将/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib目录下的文件拷贝过来

cp *so* *.a /home/alientec/linux/nfs/rootfs/usr/lib/ -d

至此库文件就全部添加好了,可以通过du命令查看目录的大小

du ./lib ./usr/lib -sh

7、创建其他文件夹

在根文件系统中创建dev、 proc、 mnt、 sys、 tmp 和 root 等目录

创建etc/init.d/rcS文件
该文件主要负责气筒启动时,启动一些服务。内容如下。最后记得加权限
chmod 777 rcS

创建etc/fstab文件

fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区
dump:1,允许备份。0,不备份。一般设置为0
pass:磁盘稽查,0,不检查,一般设置为0

#<file system> <mount pint> <type> <options> <dump> <pass>
proc      /proc   proc  defaults 0  0
tmpfs     /tmp   tmpfs  defaults 0  0
sysfs     /sys   sysfs  defaults 0  0

创建etc/inittab文件

init 程序会读取/etc/inittab这个文件, inittab 由若干条指令组成

#etc/inittab
<id>:<runlevels>:<action>:<process>
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown::/bin/umount -a -r
::shutdown::/sbin/swapoff -a

:每个指令的标识符,不能重复。但是对于 busybox 的 init 来说, 有着特殊意义。
对于 busybox 而言用来指定启动进程的控制 tty,一般我们将串口或者 LCD 屏幕设置为控
制 tty。
: 对 busybox 来说此项完全没用,所以空着。
:动作,用于指定可能用到的动作。

: 具体的动作,比如程序、脚本或命令等。

8、打包

至此,根文件系统构建完毕

将根文件系统进行打包:
tar -vjcf rootfs.tar.bz2 *
打包完成留作备用。

嵌入式linux开发04-roottfs移植相关推荐

  1. 嵌入式linux开发,libpcap移植

    libpcap是unix/linux平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础.Libpcap可以在绝大多数类unix平台下工作. 一.下载 Home | TCPDUMP & ...

  2. 嵌入式linux开发,boost移植,boost交叉编译

    boost(C++程序库的总称). Boost是为C++语言标准库提供扩展的一些C++程序库的总称.Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一, ...

  3. 嵌入式linux开发,yasm移植,yasm-1.3.0交叉编译

    Yasm是一个完全重写的NASM汇编.它支持x86和AMD64指令集. 一.下载 Download - The Yasm Modular Assembler Project 二.Ubuntu下编译 1 ...

  4. 嵌入式linux开发环境搭建(VMware16.0.0+Ubuntu16.04.3_X64)

    目录 一.安装VMware 1.VMware介绍 2.安装VMware16.0.0 二.安装ubuntu16.04.3 LTS 1.Ubuntu介绍 2.下载安装包iso 3.安装 四.新安装Ubun ...

  5. ubuntu20.04.1 64位搭建嵌入式linux开发环境

    目录 背景 开发环境的搭建 1.交叉编译工具的安装 2.开发工具和依赖库的安装 2.1. 必需部分 2.2.可选部分 ubuntu20.04.1 64位配置和编译Linux3.0内核 背景 市面上的嵌 ...

  6. linux用户环境下进入uboot,嵌入式linux开发uboot移植(一)——uboot项目简介

    嵌入式linux开发uboot移植(一)--uboot项目简介 一.uboot简介 U-Boot,全称 Universal Boot Loader,是遵循GPL条款的从FADSROM.8xxROM.P ...

  7. arm linux 内核配置,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译

    嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Ke ...

  8. 【嵌入式Linux开发一路清障-连载01】Ubuntu22.04启动U盘制作及系统安装与配置

    [嵌入式Linux开发一路清障-连载01]Ubuntu22.04启动U盘制作及系统安装与配置 Ubuntu22.04启动工具 Ubuntu22.04安装 障碍01--Ubuntu中安装搜狗五笔输入法 ...

  9. 嵌入式linux usb wifi驱动移植

    文档名称:嵌入式linux usb wifi驱动移植 版本历史 版本号        时间        内容 v1.0b001        2012-6-18        初始版本,介绍在嵌入式 ...

  10. 《嵌入式Linux开发实用教程》

    <嵌入式Linux开发实用教程> 基本信息 作者: 朱兆祺    李强    袁晋蓉 出版社:人民邮电出版社 ISBN:9787115334831 上架时间:2014-2-13 出版日期: ...

最新文章

  1. A股光刻胶飙涨背后:仅一家可供应高端光刻胶
  2. 华中科技大学计算机上机,华中科技大学计算机学院上机复试题目.doc
  3. 如何使用@component-scan排除不需要的类
  4. 【C++ grammar】对象指针、对象数组、函数参数
  5. 独家:中国电信提出建产业统一开发平台 避免个人与政企业务脱节
  6. 更改input标签的placeholder的样式
  7. openSUSE安装WPS
  8. unity自动生成敌人_Unity学习笔记一:敌人模块和敌人生成器模块脚本编写思路梳理(1)...
  9. FutureTask 中 get(timeout) 的超时是怎么玩的?
  10. 从零双排学java之数组
  11. 解决slideup或slidedown图片抖动
  12. CAD/CAM 软件架构总结
  13. 软件设计之“信雅达”
  14. js 正则校验——以J开头,以A结尾
  15. 计算机网络实验——路由器基本配置
  16. 啊哈C——学习4.10一起来找茬
  17. 为什么阿里巴巴天天招人,但又很难进,真的缺人吗?
  18. hwd分别是长宽高_DS-2CD7A47HWD-XZS 海康威视400万人脸比对摄像机 DS-2CD7A47HWD-XZS/JM
  19. 湖南大学计算机专业女生宿舍,湖南大学男生女生宿舍内部图片环境怎么样及条件...
  20. 网络安全领域中八大类CISP证书

热门文章

  1. 顶点着色器和片段着色器的区别
  2. FreeBSD使用CVSup升级Ports,让它涣然一新
  3. 安装 FME Desktop 2020 教程(内置补丁可以有效激活软件)
  4. 爱就是当你坐在他身边,哪怕什么都不做,也会感觉很开心
  5. 小旋风蜘蛛池让搜狗收录快速增长
  6. 2000-2017年全球人口密度数据下载LandScan
  7. HTTP 416 错误 – 所请求的范围无法满足 Requested Range not satisfiable
  8. XX健康:预约管理-套餐管理图片上传与预览Redis实现定时清理垃圾图片
  9. 人工智能机器学习底层原理剖析,人造神经元,您一定能看懂,通俗解释把AI“黑话”转化为“白话文”
  10. 基于CS16312控制芯片的VFD显示屏STC51单片机驱动程序