arm 源码编译kernel 对比image zimage uimage vmlinux

news/2024/5/2 12:36:16/文章来源:https://blog.csdn.net/mudawei1/article/details/130336376

一 源码编译kernel

        下载交叉编译工具链

          下载cc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz ,这是官网的。使用下面命令下载。

  585  wget https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz587  tar Jxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 590  echo $PATH591  export PATH=$(pwd)/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin:$PATH596  arm-linux-gnueabihf-gcc --version

     出现下面命令说明成功了

root@33ca02c8b788:/home/root/linux-5.10.52# arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (Linaro GCC 4.9-2017.01) 4.9.4
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.root@33ca02c8b788:/home/root/linux-5.10.52# 

一次输入上面的命令,arm-linux-gnueabihf-gcc --version执行成功,说明toolchain安装成功。

        u-boot源码编译

           这个u-boot我这里就不介绍了。

     

        内核源码编译 

下载linux内核,内核版本5.15.6. 执行下面命令

wget -c https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.6.tar.xz
tar Jxf linux-5.15.6.tar.xz
cd linux-5.10.52

   编译内核,使用交叉编译链arm-linux-gnueabihf进行编译。使用三星2410的板子。

cp arch/arm/configs/s3c2410_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 8 

    编译完成后,会生成后面几个目录。

 这个直接编译出来的elf文件,没有经过压缩,它的大小是100多M。

 生成zImage,这个镜像是经过压缩的,但是不能烧录到板子上。

 compressed目录下压缩vmlinux。

  编译uimage

mkimage -A arm -O linux -T kernel -C none -a 0x8080088 -e 0x8080088  -n "Linux kernel" -d arch/arm/boot/zImage uImage

mkimage是u-boot编译出来的命令,就是说,你要执行这个命令前,需要安装u-boot或者源码编译u-boot,我建议源码编译,使用toolchain编译出来。

二 对比各个镜像差异

名称含义
vmlinux

linux内核编译出来的原始的内核文件,elf格式,未做压缩处理。该映像可用于定位内核问题,但不能直接引导Linux系统启动。

image

Linux内核编译时,使用objcopy处理vmlinux后生成的二进制内核映像。该映像未压缩,可直接引导Linux系统启动。

压缩vmlinux 这个是在arch/arm/boot/compressed目录下,使用gzip压缩,具体可以看一下内核源码,有两个文件实现这个功能
zimage

使用gzip压缩Image后,使用objcopy命令生成的Linux内核映像。该映像一般作为uboot的引导映像文件

initrd没有搞清楚,怎么编译出来的
uimage在zImage前面增加一个64字节的头,描述映像文件类型,加载位置,大小等信息。该映像是老版本uboot专用的引导映像。

linux不同类型镜像生成过程:

上面的详细流程可以参考这两个连接,结合linux2.6.32内核。

分析vmlinux,uImage,zImage,Image的生成以及之间的关系_objcopy vmlinux zimage_小笙到此一游的博客-CSDN博客

Linux内核源码分析--zImage出生实录(Linux-3.0 ARMv7) - 程序员大本营

注: zImage 和uImage 用于32位内核。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_296524.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘镭速传输点对点传输技术,NAT+Raysync强强组合

点对点传输是一种文件即时传输方式用于实现数据的快速联动,为所有客户端提供资源,包括带宽、存储空间、计算能力。点对点传输技术有很多应用,包括共享各种格式音频、视频、数据等。 在5G重新定义带宽,信息技术不断发展的今天&…

对标世界一流|亚马逊供应链管理经验借鉴

当前电商零售行业竞争日趋激烈,服务标准的提升、产品价格的竞争力等因素,导致企业经营成本持续上升,供应链的管理水平已经成为零售行业成败的关键。然而在电商零售行业的红海竞争中,亚马逊却始终保持着高速增长的态势,…

【Python】贪吃蛇 —— 无聊必备的小项目

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

对标世界一流|弹性应对“供应链不确定性常态化” ——快消与重资产行业的经验互鉴

1963年,气象学家洛伦兹提出的“蝴蝶效应”表示:“一只蝴蝶在巴西扇动翅膀,有可能会在美国德克萨斯州引起一场龙卷风”。本文希望通过提供快消行业的先进实践,帮助重资产企业从“蝴蝶扇动翅膀”之前就开始行动,避免“龙…

如何裁剪图片大小尺寸?

如何裁剪图片大小尺寸?平时我们在工作或者学习的时候,会经常需要将图片上传到不同的网站或者平台上,然而上传的时候经常会受到尺寸的限制,有时候尺寸太大就需要变小,为了确保上传成功,我们需要将图片进行裁…

ChatGPT实现leetcode 刷题和变型

leetcode 刷题和变型 作为一个程序员,Leetcode 是一个非常重要的网站。它不仅可以帮助程序员提高算法和数据结构的能力,还能帮助我们准备技术面试。但是,刷 Leetcode 也需要花费大量的时间和精力来解决各种难题。那么,有没有什么…

【转存】Go语言设计模式

导语| 设计模式是针对软件设计中常见问题的工具箱,其中的工具就是各种经过实践验证的解决方案。即使你从未遇到过这些问题,了解模式仍然非常有用,因为它能指导你如何使用面向对象的设计原则来解决各种问题,提高开发效率&#xff0…

C++之正则表达式

目录 #include • .:换行符以外的任何字符 • […]:…字符中的任何一个 • [^…]:…字符之外的任何一个 • [[:charclass:]]:指定之字符类charclass中的一个 • \n, \t, \f, \r, \v:换行符,tab符号&#xf…

【算法】什么是离散化

作者:指针不指南吗 专栏:算法篇 🐾人类做题的过程,就是个暴搜的过程🐾 文章目录 1.引入2.思路3.模板题 1.引入 特指有序、整数的离散化。 离散化,本质上是一种哈希,它在保持原序列大小关系的前…

k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容

文章目录 一、基本介绍二、应用程序生命周期2.1 部署应用2.2 应用升级2.2.1 修改YAML文件升级(交互式)2.2.2 命令指定镜像版本升级(免交互式)2.2.3 调用vim升级 2.3 滚动升级2.3.1 升级流程 2.4 应用回滚2.4.1 查看历史发布版本2.…

微服务---RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署)

RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署) 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见…

代码随想录算法训练营第三十二天 | 利润题、覆盖范围题

122.买卖股票的最佳时机II 文档讲解:代码随想录 (programmercarl.com) 视频讲解:贪心算法也能解决股票问题!LeetCode:122.买卖股票最佳时机II_哔哩哔哩_bilibili 状态:根本做不出来,思路太巧了。 思路 想获…

车载红外夜视「升温」

红外夜视赛道,正在升温。 本周,全球车载后视镜头部供应商Gentex宣布,领投以色列热成像技术初创公司ADASKY,后者在B轮融资中拿到了3000万美元。按照计划,Gentex将协助ADASKY将红外夜视技术推向汽车市场。 事实上&#x…

真题详解(归纳法)-软件设计(六十七)

真题详解(关系模型)-软件设计(六十六)https://blog.csdn.net/ke1ying/article/details/130495791 1、2018上半年 将小阶向大阶对奇,尾数右移动 解析: 0.23 * 10的2次方 0.22 *10的3次方 第一步:0.023*10的3次方,…

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 多维时序 …

【Nginx基础篇】Linux虚拟机安装nginx

目录 一、版本区别 二、编译安装 三、启动nginx 关于防火墙 四、安装成系统服务 一、版本区别 常用版本分为四大阵营 Nginx开源版 http://nginx.org/ Nginx plus 商业版 https://www.nginx.com openresty http://openresty.org/cn/ Tengine http://tengine.taobao.org/ …

mobile代码打APK包

1、安装Android SDK Android SDK 下载地址: http://www.androiddevtools.cn/ 下载位置 下载后解压 打开解压文件,点击 SDK Manager.exe 进行安装 安装组件,这要选 Android 8.0.0 或者以上版本 再次安装,发现没什么可以安装了 2…

晚唐诗人杜荀鹤及其十首古诗赏析

一、关于出身的传说 他出身寒微。曾数次赴长安应考,不第还山。相传他是杜牧出妾之子。他诗语言通俗、风格清新,后人称“杜荀鹤体”。他就是晚唐诗人杜荀鹤。 据说,杜牧在会昌末年任池州刺史时,妾程氏有孕,为杜妻所逐&…

详解事务模式和 Lua 脚本,带你吃透 Redis 事务

先说结论: Redis 的事务模式具备如下特点: 保证隔离性;无法保证持久性;具备了一定的原子性,但不支持回滚;一致性的概念有分歧,假设在一致性的核心是约束的语意下,Redis 的事务可以…

GUI编程(一)

1、简介 GUI的核心技术:Swing、 AWT 1、外观不太美观,组件数量偏少 2、运行需要JRE环境 为什么我们要学习? 组件(JTable,JList等)很多都是MVC的经典示范,学习也可以了解mvc架构。工作时,也有可能遇见需要维护N年前awt/swing写的…