1.嵌入式Linux之uboot源码make配置编译正向分析(一)
2.bootLinux Kernel 镜像的生成以及加载
3.剖析Linux内核源码解读之《配置与编译》
嵌入式Linux之uboot源码make配置编译正向分析(一)
嵌入式Linux系统由以下几部分组成:在Flash存储器中,它们的分布一般如下。Bootloader是操作系统运行之前执行的一段小程序,用于初始化硬件设备、建立内存空间映射表,为操作系统内核做准备。聚合支付 程序源码Bootloader依赖于CPU体系结构和嵌入式系统板级设备配置。u-boot支持多种架构,适用于上百种开发板。设计与实现包括工程简介、源码结构、编译过程、图片去源码源码加载等。u-boot源码可以从ftp.denx.de/pub/u-boot/网站下载,DENX网站提供更多信息,u-boot git仓库位于gitlab.denx.de/u-boot/u...。u-boot编译分为配置和编译两步,需要指定交叉工具链、处理器架构。配置过程可以生成.config文件。源码加载使用Source Insight,安装、打开项目、梦幻源码网共享文件夹、映射网络驱动器等步骤。
bootLinux Kernel 镜像的生成以及加载
Linux Kernel 镜像格式包括:vmlinux、Image、zImage、bzImage、uImage、xipImage。vmlinux是原始可引导且未压缩的内核文件,由用户编译得到,实质是途6源码 ELF 格式。Image是经过objcopy处理的原始二进制数据内核代码,未压缩。zImage是经过gzip压缩的vmlinux加上解压代码,适用于NAND Flash。bzImage是使用不同压缩算法的压缩内核映像,压缩率更高,同样适用于NAND Flash。uImage是用于u-boot的镜像文件,比zImage多一个头部信息。xipImage则存放在NOR Flash中,直接运行无需复制到SDRAM。c的源码
内核镜像的产生过程包括:首先生成可执行的vmlinux文件;然后通过objcopy处理成Image,变小但未压缩;接着使用gzip压缩Image生成compress/vmlinux;最后再使用objcopy处理compress/vmlinux生成zImage,压缩比约为2:1。
Linux内核镜像的加载过程包括加载文件头、内存布局、分阶段加载内核镜像、实模式和保护模式下内核加载。实模式下加载boot/setup.bin,进行硬件初始化并跳转到main()函数开始执行。保护模式下加载boot/vmlinux.bin,解压缩并初始化页表,调用init/main.c:start_kernel()函数。
Linux内核镜像格式多样,根据硬件类型和存储设备选择合适的镜像格式进行加载。加载过程包括硬件初始化、内存布局设定、分阶段加载内核镜像,最后实模式和保护模式下执行内核。
使用make命令如“make zImage”可以生成zImage镜像,相关代码在arch/arm/Makefile中。
内核加载流程包含加载文件头和末尾的CRC校验码,以及在实模式和保护模式下分别执行boot/setup.bin和boot/vmlinux.bin。实模式下执行setup.bin进行硬件初始化,然后跳转到main()函数执行。保护模式下加载vmlinux.bin,解压缩后初始化页表,调用start_kernel()函数启动内核。
剖析Linux内核源码解读之《配置与编译》
Linux内核的配置与编译过程详解如下:配置阶段
首先,从kernel.org获取内核源代码,如在Ubuntu中,可通过`sudo apt-get source linux-$(uname -r)`获取到,源码存放在`/usr/src/`。配置时,主要依据`arch//configs/`目录下的默认配置文件,使用`cp`命令覆盖`/boot/config`文件。配置命令有多种,如通过`.config`文件进行手动修改,但推荐在编译前进行系统配置。配置时注意保存配置,例如使用`/proc/config.gz`,以备后续需要。编译阶段
内核编译涉及多种镜像类型,如针对ARM的交叉编译,常用命令是特定的。编译过程中,可能会遇到错误,需要针对具体问题进行解决。编译完成后,将模块和firmware(体系无关)分别存入指定文件夹,记得为某些硬件添加对应的firmware文件到`lib/firmware`目录。其他内容
理解vmlinux、vmlinuz(zImage, bzImage, uImage)之间的关系至关重要。vmlinuz是压缩后的内核镜像,zImage和bzImage是vmlinuz的压缩版本,其中zImage在内存低端解压,而bzImage在高端解压。uImage是uBoot专用的,是在zImage基础上加上特定头信息的版本。2024-11-23 03:11
2024-11-23 03:10
2024-11-23 03:06
2024-11-23 01:16
2024-11-23 01:02
2024-11-23 01:01
2024-11-23 00:37
2024-11-23 00:33