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

news2024/12/22 20:40:32

一 源码编译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.xz
  587  tar Jxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 
  590  echo $PATH
  591  export PATH=$(pwd)/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin:$PATH
  596  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.coloradmin.cn/o/494169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每天一道算法练习题--Day22 第一章 --算法专题 --- ----------最大公约数

关于最大公约数有专门的研究。 而在 LeetCode 中虽然没有直接让你求解最大公约数的题目。但是却有一些间接需要你求解最大公约数的题目。 如何求最大公约数? 定义法 def GCD(a: int, b: int) -> int:smaller min(a, b)while smaller:if a % smaller 0 and b …

一个集团企业,如何从0到1构建信息化系统?

当今时代,信息技术已经成为企业发展不可或缺的一部分,特别是对于一个大型集团公司来说,如何构建一个高效的信息化系统对于其业务发展至关重要。 我们想要构建一个优质高效的信息化系统,首先需要了解现在大的趋势是怎样的。 目前…

【Linux】Linux安装Java环境(OpenJDK)

文章目录 第一步:第二步,选择合适的版本安装:第四步,配置环境变量 linux环境为CentOS7.8 版本。 今天教大家怎么在CentOs环境中安装Java的开发环境。 在安装java之前我们先来了解一下YUM Yum(全称为 Yellow dog Updat…

【JavaEE初阶】简单了解wait和notify方法~

目录 🌟1、wait() 🌟2、notify() 🌟1、wait() (1)wait()方法与notify()方法都是Object类中的方法。 (2)wait()是让线程等待一段时间,死等——>状态WAITING:没有时间限制的等待.…

C++ | 语句的基础知识(夯实基础)

本文概要 本篇文章主要介绍数据结构中C的语句内容,适合有零基础的同学,文中描述和代码示例很详细,干货满满,感兴趣的小伙伴快来一起学习吧! 🌟🌟🌟个人简介🌟&#x1f…

CentOS 7.x 安装 ZooKeeper 并实现集群搭建

0. 集群结构 服务器IPhostname节点说明192.168.31.101master主节点192.168.31.102slave1从节点192.168.31.103 slave2 从节点 下面的安装与配置操作需要在三台服务器上都执行一遍。 1. 安装JDK ZooKeeper要求运行在 JDK 环境上,JDK安装教程可参考 CentOS 7.x 安装…

从点赞到数字货币:揭秘Diem币与Facebook的联系

大家都知道Facebook是一个全球知名的社交媒体平台,但你是否听说过与Facebook有关的数字货币Diem币呢?或许你会想,从点赞到数字货币,这是怎么回事?别着急,让我们一起揭秘Diem币与Facebook的联系。 首先&…

IP一键呼叫语音对讲怎么样?

IP一键呼叫语音对讲怎么样? IP一键呼叫语音对讲,让您的生活更加便利和安全! 无需复杂设置,轻松实现远程通话,随时随地与家人朋友沟通交流。APP端可实时监控家庭动态,保证家庭安全。 一键呼叫语音功能&am…

微信小程序——自定义组件

自定义组件 一、组件的创建二、组件的引用1、全局引用2、局部引用 三、全局引用和局部引用 一、组件的创建 第一步:在项目的根目录下创建文件夹components。 第二步:在components文件夹下创建文件夹card。 第三步:选中文件夹card 右键 选中…

openwrt广告屏蔽大师修复补丁luci-app-adbyby plus + lite

openwrt广告屏蔽大师修复补丁 目前使用方式然而有规则无法下载的通病所以可以手工拷贝随便哪里来的规则最后提示 补丁位置 : 地址 http://pan.ezdial.cn/nasone/a 备用:https://bak.ezdial.cn:8000/bakone/a 因什么值得买,在反复审核本文&…

如何在 AlmaLinux 8 上安装和使用 Docker

Docker 是面向开发人员和系统管理员的强大平台,可简化在软件容器内部署应用程序的过程。 容器允许您将应用程序及其所有部分(代码、运行时、系统工具、系统库——通常位于 /usr/bin 或 /usr/lib 中的任何内容)打包,以便它可以在任何 Linux 机器上一致地运…

Linux性能参数调优

内核的shmall和shmmax参数 SHMMAX配置了最大的内存segment的大小:这个设置的比SGA_MAX_SIZE大比较好。 SHMMIN最小的内存segment的大小 SHMMNI整个系统的内存segment的总个数 SHMSEG每个进程可以使用的内存segment的最大个数 配置信号灯( semphore …

微软 New Bing, Chat AI 绘图火力全开

嗯,今天的主角是, Microsoft New Bing! 在 Edge 里面,访问 www.bing.com,登录 Microsoft 账户,点击 CHAT, 就可以体验 Bing Chatbot. 这次, New Bing 无需加入 waitlist, 即可全面体验 ChatGPT DALL-E 的绘图功能 关键…

1、防刷限流实现1

1、本章诉求 限流的需求出现在许多常见的场景中: 秒杀活动,有人使用软件恶意刷单抢货,需要限流防止机器参与活动某api被各式各样系统广泛调用,严重消耗网络、内存等资源,需要合理限流 2、流程设计 3、方案实现 3.1…

【致敬未来的攻城狮计划】— 连续打卡第二十二天:RA2E1的RTC时钟日历

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 3.欲速则不达,今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

XXL-JOB中间件【实现分布式任务调度】

目录 1:XXL-JOB介绍 2:搭建XXL-JOB 2.1:调度中心 2.2:执行器 2.3:执行任务 3:分片广播 1:XXL-JOB介绍 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学…

港科夜闻|广东省委常委、副省长王曦到访香港科技大学

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、广东省委常委、副省长王曦到访香港科技大学。在香港科大校长、粤港澳大湾区院士联盟理事会主席叶玉如教授陪同下,王曦常委率代表团参观国家级科研设施和了解学校发展情况,并与在港中国科学院院士座…

使用MASA全家桶从零开始搭建IoT平台(二)设备注册

前言 我们不希望任何设备都可以接入我们的IoT平台,所以一个设备正常的接入流程是这样的, 1、上位机软件通过串口或其他方式读取设备的唯一标识码UUID。 2、上位机调用IoT后台接口,发送UUID和ProductID。 3、后台接口判断设备是否注册过&…

【JavaEE进阶】——第五节.SpringMVC学习介绍(上)(获取参数,传递参数——关于前后端传参交互的总结、from表单、Ajax数据提交)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:JavaEE进阶 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 目录 文章目…

车载红外夜视「升温」

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