【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统) | 您所在的位置:网站首页 › x86操作系统裁剪 › 【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统) |
嵌入式Linux系统
知识架构及层次嵌入式Linux系统构成及启动略析嵌入式Linux三剑客之uboot技术Bootloader概念UBOOTUBOOT简介UBOOT优势UBOOT功能UBOOT工作模式UBOOT源码目录UBOOT编译过程典型uboot命令
嵌入式Linux三剑客之内核技术内核介绍(功能)Linux 内核源码及组织Linux内核裁剪及编译Kconfig 的五种基本结构
嵌入式Linux三剑客之文件系统技术BusyBoxGlibc
课后作业小测验
计算机专业基础笔记目录可以点这里:计算机专业基础笔记目录 知识架构及层次Linux内核由三部分构成: Bootloader:启动引导系统(可执行文件)Kernel:内核(可执行文件)Root File System:根文件系统![]() ![]() ![]()
![]() ![]() ![]() ![]() ![]() ![]() Bootloader 是操作系统内核运行前运行的一段小程序。 功能: 初始化硬件设备,如对 CPU、SDRAM、Flash、串口等进行初始化;加载内核到内存并执行内核代码;提供一些命令工具,如操作flash、从PC机搬运内核到开发板等功能。Bootloader 相当于PC机上 BIOS 和 GRUB 功能集合体。 UBOOT常见的 Bootloader: 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文件![]() 打印环境变量: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 功能:保存开发板上的环境变量值 网络加载内核: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 系统的核心,负责管理系统的进程、内存、文件系统、网络和设备驱动等。如果把地球比作计算机系统,内核就是管理计算机资源的“政府”,内核中的每个功能模块相当于政府中的每个部门,如下图所示。 ![]() Linux内核中每个模块独立完成相应功能,并能与其它模块相互配合。 Linux 内核源码及组织Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性。 内核源代码下载地址:www.kernel.org Linux内核源码目录: 源码配置文件 脚本解释器及 KconfigMakefile文件其它文件(如设备树)
![]() 具体的先省略。。。我也没怎么看懂。。。 Kconfig 的五种基本结构 menu/endmenumenuconfigconfigchoice/endchoicesource
此处的文件系统是应用程序等数据文件的集合体。 BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。 其目标是在一张软盘上创建一个可引导的 GNU/Linux 系统 BusyBox 使用了符号链接以便使一个可执行程序看起来像很多程序一样。对于 BusyBox 中包含的每个工具来说,都会这样创建一个符号链接,这样就可以使用这些符号链接来调用 BusyBox 了。BusyBox 然后可以通过 argv[0] 来调用内部工具。 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 useMakefile 文件添加的内容: 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 useMakefile 文件添加的内容: obj-$(CONFIG_RC5_ENCRYPT) += rc5.o2、简述sqilte的移植步骤(写出具体命令)。(2分) (1)下载源码包并解压缩 (2)生成 Makefile ./configure CC=arm-linux-gcc –prefix=/opt/sqlite –host=arm-linux(3)编译及安装 make make install安装后可以在/opt/sqilte下见到移植好的可执行程序及 |
CopyRight 2018-2019 实验室设备网 版权所有 |