嵌入式Linux的组成:

  • 在硬件上,主要由cpu、emmc(或nand、sd,都属于Flash)、SDRAM、NFS(网络文件系统)四部分组成,flash是Linux的存储器,类似于Windows的硬盘;SDRAM是内存、NFS是网络调试用的网络文件系统。如果是设置为sd卡启动,在启动完成后会将EMMC设置为默认存储器,使用setenv和saveenv设置环境变量时也会将值存储到EMMC。
  • 在软件上,主要由uboot、linux内核、设备树、根文件系统组成。网络调试的嵌入式Linux系统的启动过程:uboot是系统上电后执行的第一个程序,在boot命令下通过tftp命令将ubuntu主机的内核映像文件和设备树通过网络传输到嵌入式系统板上,通过setenv设置bootargs启动参数,指定根文件系统到ubuntu主机上。
  • 从烧录工具的角度认识嵌入式Linux开发的系统组成:
    nxp提供的烧录工具MfgTool烧录的内容为:Linux内核映像zImage、设备树.dtb、根文件系统压缩包、uboot。

本文的目的是介绍uboot、linux内核、根文件系统的构建,mfgtool工具烧写系统,读者能够使用uboot、linux内核、busybox的源码编译出供mfgtool烧写的系统需要的三大组件(uboot、内核、根文件系统),能在嵌入式Linux板卡上将Linux系统运行起来。

文章目录

  • 一、bootloader
    • 1.1 bootloader介绍
    • 1.2 uboot源码
    • 1.3 uboot的编译和烧录
      • 1.3.1 编译
      • 1.3.2 烧录
    • 1.4 uboot常用命令
      • 1.4.1 基本命令
      • 1.4.2 网络命令
  • 二、Linux内核
    • 2.1 Linux内核介绍
    • 2.2 Linux内核源码
    • 2.3 编译Linux内核
  • 三、根文件系统
    • 3.1 根文件系统介绍
    • 3.2 根文件系统的构建
      • busybox介绍

一、bootloader

1.1 bootloader介绍

Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装载到内存中然后跳转到操作系统所在的空间。
常见的bootloader有Redhat公司的Redboot、ARM平台的ARMboot、由开源项目PPCBoot发展起来的U-Boot。

1.2 uboot源码

官网地址:http://www.denx.de/wiki/U-Boot/,nxp在此基础上,针对自己的芯片有自己的版本,可以在这里下载到nxp维护的uboot版本。

1.3 uboot的编译和烧录

1.3.1 编译

安装必要的库。

sudo apt-get install libncurses5-dev

编译uboot有三个步骤:清空工程、配置工程、编译工程。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

配置文件在源码根目录下的configs文件夹里,每一个配置都是针对特定开发板的配置。

1.3.2 烧录

在ubuntu中通过imxdownload工具将编译出的u-boot.bin下载到sd中(sd卡通过读卡器接入电脑)。

./imxdownload u-boot.bin /dev/sdd

1.4 uboot常用命令

1.4.1 基本命令

  • bdinfo:查询板卡信息
  • setenv:设置、删除、增加环境变量
set date 12/23 修改,如果之前没有date环境变量则增加date变量
set date 删除date变量
  • saveenv:在setenv后需要saveenv保存环境变量到EMMC或者NAND。
  • md:查看内存,md[.b, .w, .l] address [# of objects],方括号中的为可选选项,代表以byte、word、long为单位查看,#of objects代表查看的个数。示例如下:
md.w 80000000 10 查看内存里从0x80000000开始的16个word长度的数据
  • nm:修改内存里的内容
输入 nm.l 80000000后会打印0x8000000处的内容,
接着输入需要往该内存写入的值。
  • mm:连续修改内存值,相比于nm,在每次修改完内存值后内存地址会递增,可以连续修改。
  • mw:用固定值填充内存,用法:mw [.b, .w, .l] address value [count],示例如下:
mw.l 80000000 0A0A0A0A 10
用0a0a0a0a0填充从8000000开始的10个数据。

1.4.2 网络命令

设置boot的环境变量

setenv ipaddr 192.168.1.50
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.250
saveenv

二、Linux内核

2.1 Linux内核介绍

Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。
Linux最早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。

2.2 Linux内核源码

内核地址在https://www.kernel.org/,nxp发布的linux版本在这里。

2.3 编译Linux内核

首先安装lzop软件包。

sudo apt-get install lzop

编译Linux内核有四个步骤:清空工程、配置Linux的平台、配置Linux功能、编译

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

编译后会在arch/arm/boot目录下产生zImage的文件,这个就是内核映像,在arch/arm/boot/dts下产生.dtb后缀的设备树文件。

三、根文件系统

3.1 根文件系统介绍

根文件系统(rootfs)是Linux组织文件的方式,Linux中一切皆文件,对于一个没有根文件系统的操作系统,在Linux启动后会发生内核崩溃的错误。根文件系统和uboot、Linux内核一样作为Linux系统的组成部分,属于一种软件。
Linux根目录下的几个目录的作用:

  • bin:保存可执行程序,如bash、mv、ls
  • dev:设备文件
  • etc:配置文件
  • lib:系统和用户程序需要用到的库文件
  • mnt:临时挂载文件
  • proc:proc文件系统的挂载点
  • usr:软件资源目录,保存软件,如交叉编译工具链
  • var:保存临时变量
  • sbin:可执行程序,与bin的区别是该目录下的程序需要root权限执行
  • sys:sysfs文件系统的挂载点
  • opt:可选的文件、软件存放区

3.2 根文件系统的构建

busybox介绍

busybox是一个集成了Linux常用工具的软件,比如ls、ifconfig,可以在busybox官网获取到源码。

【linux】嵌入式linux的组成相关推荐

  1. ina3221嵌入式linux,嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之文件系统

    嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 一.移植环境 主  机:VMWa ...

  2. 能装linux的嵌入式,试试一张软盘可装下Linux(嵌入式Linux)

    嵌入式Linux由一个几百KB的kernel(内核)和一些根据需要进行定制的系统模块组成.由于Linux是开放源代 码的操作系统,因此,其在嵌入式领域有其不可替代的成本和高度灵活性等优势. 将Linu ...

  3. 嵌入式硬件Linux,嵌入式linux硬件什么要求

    大部分使用者初次接触linux系统电脑时,都不知道电脑里面的硬件到底是什么,和外设硬件又是什么.为此学习啦小编为大家整理推荐了相关的知识,希望大家喜欢. 嵌入式linux硬件要求的详细说明 lscpu ...

  4. lcd命令 linux,嵌入式Linux裸机开发(十五)——LCD

    嵌入式Linux裸机开发(十五)--LCD 一.LCD简介 LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置T ...

  5. 嵌入式面试linux,嵌入式Linux面试题

    1. 把N个有序链表合并成一个新的有序链表 2. 派生类的构造函数/析构函数调用次序(常见) 3. 列举常见的设计模式(Marvell) 4. 解释黑盒测试与白盒测试,谈谈你项目中如何做测试 5. 设 ...

  6. ndis拨号软件 linux,嵌入式linux系统下NDIS拨号

    一.USB端口信息 U8300C模块USB会枚举出6个逻辑端口,他们的枚举顺序.端口功能.端口名称如下表所示: 二.驱动集成 1.内核配置: make menuconfig 到内核时: Device ...

  7. linux -- 嵌入式linux下wifi无线网卡驱动

    插入模块驱动 [root@WEIYAN wifi]$ insmod zd1211rw.ko usb 1-1: reset full speed USB device using s3c2410-ohc ...

  8. 嵌入式 Linux 的基础知识介绍

    ​ 嵌入式Linux是Linux内核的改编版,用于嵌入式系统.嵌入式Linux最流行的例子是Android 操作系统. 但是,需要大量硬件资源来支持嵌入式 Linux,特别是如果它将部署在实时机器对机 ...

  9. 嵌入式Linux学习(一)

    嵌入式系统 嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分.通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板.事实上,所有带有数字接口的设备,如手表.微波炉.录像机.汽车等, ...

  10. 嵌入式Linux性能优化

    什么是嵌入式系统? 嵌入式系统(Embedded System),是一种嵌入机械或电气系统内部.具有专一功能和实时计算性能的计算机系统.[1][2]嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统 ...

最新文章

  1. 新型智能头盔可快速评估患者中风的大小、位置和类型
  2. 如何DoDelete(Delete)中的Delete文本值传到DoDelete方法,报错信息为:Delete未定义!...
  3. 6. 你必须掌握Dart中的数组
  4. leetcode 767. 重构字符串(贪心算法)
  5. 十二、PHP框架Laravel学习笔记——构造器的查询表达式
  6. 关于Python对齐问题
  7. awk命令和grep命令的使用
  8. 百度怎么进行模糊搜索_怎么在百度上准确搜索,提高10倍效率?
  9. Java与微信不得不说的故事——消息的接收与发送
  10. 实习成长之路——设计原则三:里式替换(LSP)跟多态有何区别?哪些代码违背了LSP?
  11. How Do I? Videos for Devices
  12. WCDMA系统中的PN码同步原理
  13. cisco 2800路由器密码恢复
  14. 面试 HTTP ,99% 的面试官都爱问这些问题
  15. python之arp欺骗
  16. 麦克风声音太小别人听不到怎么办
  17. sql float保留两位
  18. python 中的 re.compile 函数(转)
  19. kalibr使用笔记
  20. 虎牙安卓Android最新的,虎牙安卓版

热门文章

  1. 卷积神经网络在句子分类上的应用[翻译]
  2. 弱网、2G、3G、4G测试
  3. Python 官方的中文文档
  4. JSP连接数据库实现注册登录(附带上传头像)
  5. 【LaTeX 问题解决方案】I couldn‘t open file name `.aux‘
  6. java乘法逆元与除法取模,关于数论乘法逆元及相关知识点
  7. 平阴县实验学校计算机老师,人物 | 平阴县实验学校邢珍:认认真真做事,踏踏实实做人...
  8. c# web版本,进销存和财务管理业务系统 ERP系统源码
  9. Python爬虫 | 利用python爬虫获取想要搜索的数据
  10. mysql数据库复合索引