【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统)_嵌入式linux引导程序操作模式是什么-程序员宅基地

技术标签: Linux内核  运维  linux  服务器  文件系统  嵌入式  

知识架构及层次

Linux内核由三部分构成:

  • Bootloader:启动引导系统(可执行文件)
  • Kernel:内核(可执行文件)
  • Root File System:根文件系统

嵌入式Linux系统构成及启动略析


嵌入式 Linux 启动类同4X100 米接力跑,是由多个部分共同完成,包括:

第一棒:bootloader 初始化(PC 上则是 BIOS 初始化和 grub 启动两步)。

首先完成内存初始化、微处理器配置、时钟初始化等基本工作,然后搬运Linux 内核到特定内存,并调用Linux 内核初始化函数(一般是head_armv.s 中的第一条指令),启动内核,把CPU 的控制权交给内核代码。

第二棒:内核代码开始执行,初始化硬件,构建内存管理系统、进程管理系统、模块管理系统、中断管理系统等 Linux 各种重要功能系统,最后创建init 进程,并加载根文件系统,将控制权递交到根文件系统。

第三棒:内核挂载根文件系统(相当于将根文件系统内容解压缩)。

第四棒,根据 inittab 配置文件,加载应用程序,最后启动 shell 程序,Linux 启动完成。

嵌入式Linux三剑客之uboot技术

Bootloader概念

Bootloader 是操作系统内核运行前运行的一段小程序。

功能:

初始化硬件设备,如对 CPU、SDRAM、Flash、串口等进行初始化;

加载内核到内存并执行内核代码;

提供一些命令工具,如操作flash、从PC机搬运内核到开发板等功能。

Bootloader 相当于PC机上 BIOS 和 GRUB 功能集合体。

UBOOT

常见的 Bootloader:

UBOOT简介

U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios 与 MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。

这个项目起源于 Magnus Damm.在 8xx PowerPC 架构下写的引导加载程序:8xxROM。1999 年十月,Wolfgang Denk 将项目移转到 SourceForge.net,但 SourceForge.net 不允许数字开头的项目名称,所以改名为 PPCBoot。2002年11 月 PPCBoot 改名为 U-Boot。

UBOOT优势

开放源码

支持多种嵌入式操作系统内核,如 Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS、android

支持多个处理器系列,如 PowerPC、ARM、x86、MIPS

较高的可靠性和稳定性;

高度灵活的功能设置,适合 U-Boot 调试、操作系统不同引导要求、产品发布等;

丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等

较为丰富的开发调试文档与强大的网络技术支持

UBOOT功能

系统引导支持NFS 挂载、RAMDISK (压缩或非压缩)形式的根文件系统;

支持 NFS 挂载、从 FLASH 中引导压缩或非压缩系统内核;

基本辅助功能强大的操作系统接口功能;

可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;

支持目标板环境参数多种存储方式,如 FLASH、NVRAM、EEPROM;

CRC32 校验可校验 FLASH 中内核、RAMDISK 镜像文件是否完好

设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;

上电自检功能 SDRAM、FLASH 大小自动检测;SDRAM 故障检测;CPU型号;

特殊功能 XIP 内核引导;

UBOOT工作模式

启动加载模式是 Bootloader 的正常工作模式,嵌入式产品发布时,Bootloader 必须工作在这种模式下,Bootloader 将嵌入式操作系统从 FLASH 中加载到 SDRAM 中运行,整个过程是自动的。

下载模式就是 Bootloader 通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的 FLASH 中。

UBOOT源码目录

  • 源码
  • 配置文件及脚本解释器
  • Makefile文件

UBOOT编译过程

  1. 解压缩uboot源码到目录下
  2. 根据开发板进行配置
    make smdk2440
  3. 编译uboot
    make
  4. 烧写uboot.bin到开发板(使用仿真器完成)
  5. 启动开发板后,uboot就运行起来

典型uboot命令

  • nand分区命令:nand
  • 参数命令:setenv/printenv
  • 传输文件命令:load/tftp
  • 启动命令:bootm
  • 其它命令:nm/cp/date

打印环境变量printenv
功能:打印开发板上的环境变量值
例:

Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
Environment size: 80/8188 bytes

设置环境变量:setenv 变量 值

功能:设置开发板上的环境变量值

例:

Uboot> setenv ethaddr 12:34:56:78:9A:BC
Uboot> setenv ipaddr 192.168.1.1
Uboot> setenv serverip 192.168.1.254   
			(tftp服务器的地址)

保存环境变量:saveenv

功能:保存开发板上的环境变量值

保存环境变量:saveenv

功能:保存开发板上的环境变量值

网络加载内核:tftp 待加载到的内存地址 待加载文件名

功能:通过网络将位于PC机上tftp服务器目录(如为/tftpdroot) 下的文件加载到开发板内存地址

例:把 server(IP=环境变量中设置的serverip)中 /tftpdroot/ 下的 vmlinux 通过 TFTP 读入到物理内存 32000000 处。

Uboot> tftp 32000000 vmlinux

启动内核命令bootm 内核内存地址

功能:将位于内核内存地址处的内核启动起来

例:

Uboot> bootm 0x30008000
## Booting image at 30008000 ...
Starting kernel ...
Uncompressing
Linux......................................................................
done.

NandFlash 操作命令:nand 命令码 参数

功能:

根据命令码对 nandflash 设备进行相关操作,命令码有以下几种

erase

语法形式:nand erase EraseAddr EraseSize

功能:擦除 nand 设备从 EraseAddr 地址处 EraseSize 块大小内容

write

语法形式:nand write FromMemAddr ToNandAddr size

功能:将内存地址为 FromMemAddr 处 size 字节数据写到 nand 设备 ToNandAddr 地址处。

Info

语法形式:nand info

功能:打印 nand 设备信息

read

语法形式:nand read ToMemAddr FromNandAddr size

功能:从 Nand 设备地址为 FromNandAddr 处读取 size 字节数据到内存 ToMemAddr 处。

嵌入式Linux三剑客之内核技术

内核介绍(功能)

内核是嵌入式Linux 系统的核心,负责管理系统的进程、内存、文件系统、网络和设备驱动等。如果把地球比作计算机系统,内核就是管理计算机资源的“政府”,内核中的每个功能模块相当于政府中的每个部门,如下图所示。

从功能角度来看:

内核就是一系列功能模块构成,包括:

系统调度

进程管理

负责管理CPU资源,以便让各个进程可以以尽量公平的方式访问CPU。进程管理还包括控制活动进程。

内存管理

Linux的成功和它优秀的内存管理联系非常密切,因为一个系统的高效性欲稳定性往往决定于它的内存管理机制。

为了解决容量,Linux 引入了虚拟存储系统;

为了解决快速,Linux 引入了cache、交换机制等等;

以使得存储系统在容量上接近硬盘,在速度上接近 cache。

虚拟文件系统(VFS)

VFS 隐藏各种文件系统的具体细节,为文件操作提供统一的接口。

网络协议栈

内核协议栈为Linux提供了丰富的网络协议实现。其中TCP/IP协议栈提供了所有操作系统中最高效最简洁的实现模式。

设备驱动

Linux 内核中有大量代码(约60%)都在设备驱动程序中,它们以一种特定的模式管理底层硬件设备并以统一的接口向上层进程提供底层硬件的使用。

中断管理系统

linux中断管理系统是根据处理器底层硬件中断系统来建立合理高效的软硬件响应机制。Linux中断管理系统包括中断管理架构的建立、中断服务程序的编写以及包括对硬件中断的响应等多个 部分。

系统调用接口

系统调用层为用户空间提供了一套标准的系统调用函数来访问 Linux 内核,搭起了用户空间到内核空间的桥梁。

Linux内核中每个模块独立完成相应功能,并能与其它模块相互配合。

Linux 内核源码及组织

Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性。

内核源代码下载地址:The Linux Kernel Archives

Linux内核源码目录:

源码

配置文件

脚本解释器及 Kconfig

Makefile文件

其它文件(如设备树)

Linux内核裁剪及编译

  • make menuconfig
  • make uImage

具体的先省略。。。我也没怎么看懂。。。

Kconfig 的五种基本结构

  • menu/endmenu
  • menuconfig
  • config
  • choice/endchoice
  • source

嵌入式Linux三剑客之文件系统技术

此处的文件系统是应用程序等数据文件的集合体。

BusyBox

BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。

其目标是在一张软盘上创建一个可引导的 GNU/Linux 系统

BusyBox 使用了符号链接以便使一个可执行程序看起来像很多程序一样。对于 BusyBox 中包含的每个工具来说,都会这样创建一个符号链接,这样就可以使用这些符号链接来调用 BusyBox 了。BusyBox 然后可以通过 argv[0] 来调用内部工具。

Glibc

Glibc 是提供系统调用和基本函数的 C 库。

glic 库通常使用于 X86 架构的 Linux 系统,它虽然非常完备,但是却非常庞大,对于嵌入式系统来说,使用它意味着内存的消耗也会非常巨大。

uClibc 是一个小型的 C 库,应用于嵌入式 Linux 系统开发。它基本实现了 glibc 的功能,几乎所有glibc 支持的应用程序都能在 uClibc 上运行。

课后作业

1.嵌入式Linux操作系统包括(bootloader)、(Linux 内核) 、(根文件系统)三部分组成。

2.在PC机上Linux系统编译使用的编译器名为(gcc) ,ARM处理器嵌入式编译器名为(arm-linux-gcc)。

3.从C语言角度来理解,嵌入式Linux内核仅是众多(函数)的集合体,其有一个类似于main的函数,名称为 (start_kernel)。

4.简述 bootloader 的功能:

初始化硬件设备,如对 CPU、SDRAM、Flash、串口等进行初始化;

加载内核到内存并执行内核代码;

提供一些命令工具,如操作flash、从PC机搬运内核到开发板等功能。

5.在uboot中,打印开发板上环境变量值的命令为(printenv),设置IP地址为192.168.1.1的命令为(setenv ipaddr 192.168.1.1),假如嵌入式内核名为vmlinux,通过tftp加载内核的命令为 (tftp 32000000 vmlinux),启动嵌入式Linux内核的命令为(bootm 0x32000000)。

6.嵌入式Linux内核裁剪命令为(make menuconfig);裁剪完成后生成配置选择文件(.config);编译内核命令为(make zImage) 。

7.启动linux后常用的命令如 ifconfig、cp、ls 等通常位于(文件系统)中;嵌入式Linux环境下生成文件系统的常用工具为(mkyaffs2img);以 yaffs 方法为例,将嵌入式文件夹压缩成一个 yaffs2 格式的文件系统命令为(mkyaffs2img 文件夹 镜像文件名) 。

8.构建嵌入式Linux系统时,烧写bootloader的工具为(hjtag);烧写Linux内核一般使用(bootloader)来烧写,烧写文件系统一般使用(bootloader)来烧写。

测验:

写出嵌入式Linux内核裁剪基本步骤(要求写出具体命令)

make menuconfig
make zImage
# Ubuntu可以使用: make uImage

如果向内核添加RC5加密代码rc5.c,拟存储到linux内核文件夹crypt目录下,并要求能以图形方式供用户裁剪,关联宏为CONFIG_RC5_ENCRYPT。写出该文件夹下Makefile文件和Kconfig文件修改内容。

Kconfig 文件添加的内容:

config RC5ENCRYPT
	bool "RC5 ENCRYPT SUPORT"
	help 
		this is a simple test ,no use

Makefile 文件添加的内容:

obj-$(CONFIG_RC5_ENCRYPT) += rc5.o

小测验

1、构建嵌入式Linux系统是嵌入式开发的重要内容,包括bootloader裁剪和编译、Linux内核裁剪和编译以及文件系统裁剪和制作等流程。请简答:

(1) 简述通用bootloader核心功能(2分)。

(2) 写出嵌入式Linux内核裁剪基本步骤(要求写出具体命令)(3分)

(3) 如果向内核添加RC5加密代码rc5.c,拟存储到linux内核文件夹crypt目录下,并要求能以图形方式供用户裁剪,关联宏为CONFIG_RC5_ENCRYPT。写出该文件夹下Makefile文件和Kconfig文件修改内容。(3分)

(1)

初始化硬件设备,如对 CPU、SDRAM、Flash、串口等进行初始化;

加载内核到内存并执行内核代码;

提供一些命令工具,如操作flash、从PC机搬运内核到开发板等功能。

(2)

make menuconfig
make zImage

(3)Kconfig 文件添加的内容:

config RC5ENCRYPT
	bool "RC5 ENCRYPT SUPORT"
	help 
		this is a simple test ,no use

Makefile 文件添加的内容:

obj-$(CONFIG_RC5_ENCRYPT) += rc5.o

2、简述sqilte的移植步骤(写出具体命令)。(2分)

(1)下载源码包并解压缩

(2)生成 Makefile

./configure CC=arm-linux-gcc –prefix=/opt/sqlite –host=arm-linux

(3)编译及安装

make
make install

安装后可以在/opt/sqilte下见到移植好的可执行程序及

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_50662680/article/details/128390660

智能推荐

5-9 声明一个图书类_java书本数量-程序员宅基地

文章浏览阅读6.8k次,点赞5次,收藏22次。5-9 声明一个图书类,其数据成员为书名、编号(利用静态变量实现自动编号)、书价,并拥有静态数据成员册数、记录图书的册数,在构造方法中利用此静态变量为对象的编号赋值,在主方法中定义对象数组,并求出总册数。class Book{ private String name; private int id; private float price; private stat_java书本数量

通过WebRTC实现实时视频通信(一)_webrtc可以与摄像头对讲吗-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏10次。WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla基金会、Opera支持下被包括进万维网联盟的W3C推荐标准。_webrtc可以与摄像头对讲吗

matlab多变量拟合regress,matlab多元与非线性回归即拟合问题regressnlinfit-程序员宅基地

文章浏览阅读2k次。matlab多元与非线性回归即拟合问题regressnlinfit 回归(拟合)自己的总结(20100728) 1:学三条命令:polyfit(x,y,n)---拟合成一元幂函数(一元多次) regress(y,x)----可以多元, nlinfit(x,y,’fun’,beta0) (可用于任何类型的函数,任意多元函数,应用范围最主,最万能的) 2:同一个问题,可能这三条命令都可以使用,但结果肯..._matlab双曲线拟合

EOS代码架构及分析(三)_eos代码架构及分析 fly_鹏程万里-程序员宅基地

文章浏览阅读511次。EOS采用DPoS算法和块内分片技术,实现了百万级别TPS的超高性能,可以媲美中心化服务器的处理能力,同时保持去中心化的属性,成为了区块链3.0的代表。那么为什么EOS有如此出色的性能表现?本文将从EOS的核心设计原理以及主要数据结构进行分析。EOS VS Bitcoin我们知道,比特币采用POW共识算法确认区块:1)Bob向Alice发出一笔转账消息;2)客户端将消息广播给所有矿..._eos代码架构及分析 fly_鹏程万里

C# 调用 c 封装dll_c#调用c 的dll-程序员宅基地

文章浏览阅读747次。其中在定义嵌套结构体时需提前定义基础结构体。_c#调用c 的dll

Logstash中的四大插件_logstash 插件-程序员宅基地

文章浏览阅读380次。语法:(?举例:捕获10或11和长度的十六进制数的queue_id可以使用表达式(?filter {grok {如果表达式匹配失败,会生成一个tags字段,字段值为 _grokparsefailure,需要重新检查上边的match配置解析是否正确。_logstash 插件

随便推点

qemu模拟arm嵌入式环境_qemu-system-arm-程序员宅基地

文章浏览阅读2.7k次。文章目录一、安装qemu二、安装arm工具链三、下载编译内核四、制作根文件系统五、qemu 运行1、直接启动kernel2、通过uboot启动内核2.1 配置QEMU Tap网络2.2 安装配置tftp2.3 编译uImage2.4 编写启动脚本boot.sh3. 挂载 NFS 文件系统六、qemu 模拟机连接外网七、其他1、制作多分区镜像2、运行qemu一、安装qemu1、下载编译安装# wget https://download.qemu.org/qemu-4.2.0.tar.xz# tar x_qemu-system-arm

眼睛慢慢眯成一条线的人都是实力很强劲的,教你在Unity中通过BlendShape来实现角色面部表情过渡切换(Animation)-程序员宅基地

文章浏览阅读1w次,点赞79次,收藏171次。在Unity项目中,我们可能需要实现3D角色表情的过渡切换,本文介绍了通过BlendShape来实现表情过渡切换的功能。_blendshape

前端跨域携带cookie_前端请求携带cookie-程序员宅基地

文章浏览阅读4k次,点赞2次,收藏4次。前端需要跨域携带cookie_前端请求携带cookie

一、rip实验拓扑-程序员宅基地

文章浏览阅读741次,点赞21次,收藏18次。00 0000----192.168.1.128/26-----R1环回。10 0000----192.168.1.160/27-----L1环回。00 0000------192.168.1.192/26---R2环回。3、配置缺省路由,实现3.3.3.0/24互通,至此实现全网通,并测试。0 0000-----192.168.1.128/27----L0环回。2、配置RIP协议,宣告网段,除了3.3.3.0/24环回,,并测试。5、接口汇总,并防环,减少路由条目,测试,实现全网通。

animation.ArtistAnimation的天坑和报错【not enough image data】-程序员宅基地

文章浏览阅读1.5k次,点赞6次,收藏4次。1、plt.plot和plt.scatter的返回值不一样当对plt.scatter进行画动态gif图时,需要使用.findobj()比如im = plt.scatter(nix, niy, marker = "*",color = "b").findobj()ims.append(im)ani = animation.ArtistAnimation(fig, ims, interval=200, repeat_delay=1000) ani.save("test.gif", writer_not enough image data

【Python小工具系列】使用 Python 循环批量打开网页链接_python批量打开网址-程序员宅基地

文章浏览阅读1.3k次,点赞52次,收藏46次。欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。 欢迎订阅本专栏 。_python批量打开网址

推荐文章

热门文章

相关标签