嵌入式系统构成:

主要由bootloader、kernel、以及根文件系统三部分组成。

内核制作步骤:

制作嵌入式平台使用的linux内核制作方法与pc平台上的linux内核基本一致

1.清除原有配置与中间文件

x86:make distclean

arm:make distclean

2.配置内核

x86:make menuconfig

arm: make menuconfig ARCH=arm

3编译内核4

x86:make bzImage

arm:make uImage ARCH=arm CROSS_COMPILE=arm-linux-

注意make zImage与make uImage的区别

make uImage会先产生zImage,然后再产生uImage(再zImage的基础上加上48字节的头,包括压缩方式等)

用tftp下载时,需要把zImage拷贝到/tftp文件夹下

根文件系统制作

文件系统包含两个层次的含义:

1、按照固定格式组织的目录与文件(看的见)

2、在特定的存储介质上管理这些目录和文件需要的数据(看不见)

制作文件系统步骤:

1、创建目录和文件

2、位创建好的目录和文件建立管理数据

mkdir rootfs
cd rootfs
mkdir bin dev etc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules

2.创建设备文件

cd dev/
mknod -m console c 1 //mknod:创建设备文件
mknod -m null c

3、安装/etc

tar etc.tar.gz  -C  /XXX/rootfs

4、编译内核模块

进入linux内核目录下

make modules ARCH=arm  CROSS_COMPILE=arm-linux-           //编译的结果,内核模块.ko文件散落在各个角落中

5、安装内核模块

make modules_install ARCH=arm INSTALL_MOD_PATH=../rootfs  //把.ko文件copy到lib/modules中

安装/编译busybox

Busybox: 嵌入式开发中的瑞士军刀

1.配置busybox
#make menuconfig    //进入busybox目录下
a、进入Busybox Settings ->build Options->
选中 “Build busybox as a static binary”, 静态链接

Cross Compiler prefix (arm-linux-)
Installation Options->
选中 “Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的/usr目录下,破坏宿主系统

Busybox Installation Prefix (/xxx/rootfs)
该选项表明编译后的busybox的安装位置

编译安装busybox

make:编译

make install   //安装

文件系统类型

linux引入虚拟文件系统VFS(Virtual File System)。

在嵌入式linux应用中,主要的存储设备为RAM和FLASH。常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,ramdisk,ramfs等。

jffs2:日志闪存文件系统版本2,用于NOR flash,可读写、支持数据压缩的日志文件系统。

yaffs/ubitFS:用于nand flash设计的一种日志型文件系统,不支持数据压缩。

Cramfs:只读的压缩文件系统。(用的越来越少)

Ramdisk:将部分固定大小的内存当做块设备来使用。

Initramfs:将内存当做块设备用(现在用的多)

NFS:网络文件系统。 (开发阶段使用)

把zImagecopy到/tftp下

tftp 31000000 zImage

nand erase 200000 300000(offset  size)

nand write 31000000 200000 300000(内存addr offset  size)

利用Initramfs特点:每次添加一个功能都需要重新编译内核,重新下载。

嵌入式linux内核制作、根文件系统制作的更多相关文章

  1. Linux内核与根文件系统的关系1

    Linux内核与根文件系统的关系开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题!一语破天机: “尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用 ...

  2. Linux内核与根文件系统的关系

    开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题!         一语破天机: “尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具.这 ...

  3. Linux内核和根文件系统引导加载程序

    续博文<u-boot之u-boot-2009.11启动过程分析> Linux内核启动及文件系统载入过程 当u-boot開始运行bootcmd命令.就进入Linux内核启动阶段,与u-boo ...

  4. debian下为stm32f429i-discovery编译uboot、linux内核和根文件系统

    交叉编译器:arm-uclinuxeabi-2010q1 交叉编译器下载下来后解压,然后将其中bin文件夹路径加入到PATH变量中. 根据<debian下烧写stm32f429I discove ...

  5. linux内核挂载根文件系统时报错”VFS: Cannot open root device "ram0" or unknown-block(0,0): error -6“如何处理?

    1. 通过error -6得到: #define ENXIO            6      /* No such device or address */ 2. 解决办法 使能CONFIG_BL ...

  6. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...

  7. 嵌入式linux内核和根目录制作

    系统组成:Bootloader, Boot parameters, Kernel, Root filesystem嵌入式linux系统有linux内核与根文件系统两部分构成,两者缺一不可. 内核制作: ...

  8. 嵌入式Linux内核+根文件系统构建工具-Buildroot 快速入手指导【转】

    本文转载自:https://my.oschina.net/freeblues/blog/596448 嵌入式Linux内核+根文件系统构建工具-Buildroot 快速入手指导 buildroot 是 ...

  9. linux根文件系统制作

    在嵌入式中移植的内核下载到开发板上,是没有办法真正的启动Linux操作系统的,会出现无法加载文件系统的错误. 那么根文件系统在系统启动中到底是什么时候挂载的呢?先将/dev/ram0挂载,而后执行/l ...

随机推荐

  1. 移动端web开发技巧 -- 转载

    META相关 1. 添加到主屏后的标题(IOS)<meta name="apple-mobile-web-app-title" content="标题"& ...

  2. 查看当前mysql数据库实例中,支持的字符集有哪些,或者是否支持某个特定字符集

    需求描述: 查看当前mysql实例中支持哪些字符集,过滤特定的字符集 操作过程: 1.通过show character set来进行查看 mysql> show character set; + ...

  3. 九度 1500:出操队形(LIS变形)

    题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往楼下跑了,然后身高矮的排在队伍的前面,身高较高的就要排在队尾.突然,有一天出操负责人想了一个 ...

  4. Loadrunner windows计数器

    object (对象) Counters (计数器名称) Description (描述) 参考值 Memory Available Mbytes 可用物理内存数.如果该值很小(4MB或更小),则说明 ...

  5. sqlmap tutorial

    svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev sqlmap.py -u "http://www.isl ...

  6. Extjs6 Sdk中常用文件的作用

    一.框架文件 ext.js: 压缩版. 动态加载扩展类的基础框架. ext-all.js: 压缩版. 包含框架全部类. ext-all-debug.js: 未压缩版. 包含框架全部类 ext-debu ...

  7. synchronized同步方法

    “非线程安全”其实会在多个线程对同一个对象中的实例变量进行并发访问的时候产生,产生的后果是脏读,也就是取到的数据是被更改过的.而“线程安全”就是以获得的实例变量的值是经过同步处理的,不会出现脏读的现象 ...

  8. 单例模式与静态变量在PHP中 (转载)

    在PHP中,没有普遍意义上的静态变量.与Java.C++不同,PHP中的静态变量的存活周期仅仅是每次PHP的会话周期,所以注定了不会有Java或者C++那种静态变量. 所以,在PHP中,静态变量的存在 ...

  9. WEB安全番外第一篇--其他所谓的“非主流”漏洞:URL跳转漏洞与参数污染

    一.URL跳转篇: 1.原理:先来看这段代码: <?php if(isset($_GET["url_redircetion_target"])){ $url_redirect ...

  10. 4.querystring属性

    1.querystring.stringify(obj[, sep[, eq[, options]]]) 序列化, 第二个参数分隔符, 第三个参数是对象分隔符 querystring.stringif ...