Linux内核单独编译

news/2025/2/7 12:39:35/

        现在的芯片功能越来越强大,功能也更加的丰富,为了推广自己的产品,一般芯片厂商都会提供一个包含Uboot,Kernel,Rootfs,以及芯片模块功能的SDK。一般在SDK中会有多个文件夹,比如uboot,kernel等,只需要在SDK的根目录执行一个编译脚本就可以完成各个模块的编译了。这样的好处是我们不用自己去费力解决三大件的适配了,但是很明显也会带来另一个问题,那就是对各个模块的编译理解不深刻。另外有时候可能想要尝试其它版本的内核,或项目要求必须指定内核版本,因此,最好还是了解一下如何去单独编译内核。

        关于内核单独编译,这里建议还是找已经明确支持你所用芯片的版本,虽然理论上更旧的版本也是可用的,但适配工作将更加繁琐。

        首先是内核源码的下载

https://www.kernel.org/icon-default.png?t=N7T8https://www.kernel.org/         解压后得到一个包含诸多文件夹及文件的内核源码,里面很多文件,这里列举几个比较重要或常用的做说明。

        makefile文件:里面记录着编译流程和编译内容,它指定的整个编译过程的规则。当然子文件夹中还会有makefile文件,里面是针对子文件夹源码的编译规则。

        arch文件夹:里面针对各个架构做分类,不同架构下面也会有芯片厂商的分类。这里面有很多芯片的开发板的一些配置文件,以及各芯片所对应开发板的设备树文件。

        我们在编译时必须得安装一些工具软件,这个在编译时如果报错了再去解决,当然交叉编译器和make工具肯定得提前搞定。

        我们在进行内核编译时有两种方法,一种是直接通过make menuconfig进入图形化配置界面,然后勾选需要的配置,确定好之后使用make进行编译。但是,我们知道Linux内核中的配置项是特别多的,一项项去配置几乎是不可能的,不仅是因为参数功能不了解,而且也浪费时间。所以可以利用内核中已有的同款芯片开发板的配置文件,先make xx_defconfig,然后再使用make menuconfig进入图形化界面去调整,这样需要配置的就不多了。

        事实上,以上两种方式最终都会生成一个隐藏文件.config,在编译时会读取这个文件来进行编译。这个文件就是编译中的参数列表,大多数是各种配置功能的开或关,也有少部分是参数。如果很清楚自己需要的配置,也可以直接修改该文件,事实上.config与xx_defconfig的内容格式是一样的。

        在配置好编译参数后就可以进行编译了,输入make后等待编译完成,会在对应arch的boot文件夹下生成镜像文件,输入make modules_install可以进行内核模块的安装。

        

        


http://www.ppmy.cn/news/1346226.html

相关文章

C#上位机与三菱PLC的通信02--MC协议介绍

1、协议介绍 三菱 PLC MC 协议是一种用于三菱 PLC 与上位机之间进行数据通信的协议,也称为 Mitsubishi Communication Protocol。该协议支持串口、以太网等多种通讯方式,可实现实时数据的采集和交换。三菱PLC的MC协议是一种数据通信协议,它用…

Google Chrome Close AutoUpdate

DOMException: play() failed because the user didn‘t interact with the document first.-CSDN博客 html5 audio video-CSDN博客 Google Chrome Close AutoUpdate 关闭google浏览器自动更新 1:检查是否已安装google浏览器,并卸载: 2&…

电动汽车雷达技术概述 —— FMCW干扰问题

一、电动汽车上有多少种传感器? 智能电动汽车(包括自动驾驶汽车)集成了大量的传感器来实现高级驾驶辅助系统(ADAS)、自动驾驶功能以及车辆状态监测等功能。以下是一份相对全面的智能电动汽车中可能使用到的传感器列表…

Codeforces Round 923 (Div. 3)E. Klever Permutation 找规律,有共同区间

Problem - E - Codeforces 目录 Source of idea: 思路: 代码: 另一个up的找规律的解法: Source of idea: Codeforces Round 923(A-F题解) - 哔哩哔哩 (bilibili.com) 思路: 上面up分析的很好。两个相邻区间也就端点不一样&…

C# Task的使用

C#中的Task类是.NET框架中用于实现异步编程的核心组件之一,它在.NET Framework 4及更高版本以及.NET Core中广泛使用。Task对象代表一个异步操作,并提供了跟踪异步操作状态、获取结果和处理完成通知的方法。 Task 类提供了对异步操作的封装,…

re:从0开始的CSS学习之路 6. 字体相关属性

1. 字体相关属性 font-size 字体大小 font-family 字体的系列(字体簇) 可以设置多个字体,每个字体之间以逗号隔开 设置多个字体的目的是为了用户尽可能的支持字体 网页字体的五大类: serif 衬线字体 sans-serif 非衬线字体 monos…

常识与非常识

常识与非常识之间的区别主要体现在知识的普遍接受程度、直觉性、以及日常应用的广泛性上。理解这两者的差异有助于我们更好地认识人类知识和认知过程的复杂性。 常识 常识是指大多数人在日常生活中广泛接受并使用的知识或信念。这种知识往往被认为是基本的、直观的,…

Go基础学习笔记-01

学习笔记记录了我在学习官方文档过程中记的要点,可以参考学习。 go build *.go 文件 编译 go run *.go 执行 go mod init 生成依赖管理文件 gofmt -w *.go 格式换名称的大小写用来控制方法的可见域主方法及包命名规范 package main //注意package的命名&#xff0…