【ARM-Linux篇】内核编译

一、Linux内核的主要功能

Linux内核的主要功能:进程管理、内存管理、驱动、系统调用

Linux操作系统框架

二、Linux内核编译流程 

方法一:

1. 运行 build.sh 脚本, 记得加 sudo 权限

gyj@gyj-virtual-machine:~/orangepi-build$ sudo ./build.sh

2. 选择 Kernel package, 然后回车

 3. 然后会提示是否需要显示内核配置界面, 如果不需要修改内核配置, 则选择第一个即可, 如果需要修改内核配置, 则选择第二个

4. 接着选择开发板的型号

5. 查看编译生成的内核相关的 deb 包

gyj@gyj-virtual-machine:~/orangepi-build$ ls output/debs/linux-*
output/debs/linux-dtb-next-sun50iw9_3.1.0_arm64.deb
output/debs/linux-image-next-sun50iw9_3.1.0_arm64.deb
output/debs/linux-headers-next-sun50iw9_3.1.0_arm64.deb 

6. 重复编译 kernel 时, 使用下面的命令无需通过图形界面选择, 可以直接开始编译kernel

sudo ./build.sh BOARD=orangepizero2 BRANCH=next BUILD_OPT=kernel
KERNEL_CONFIGURE=no 

7. 如果对内核做了修改, 可以使用下面的方法来更新开发板 linux 系统的内核和内核模块

scp linux-image-next-sun50iw9_3.1.0_arm64.deb test@192.168.0.113:/home/orangepi/ 

sudo apt purge -y linux-image-next-sun50iw9

sudo dpkg -i linux-image-next-sun50iw9_3.1.0_arm64.deb

sudo reboot -f

方法二: 

1. 清理旧配置文件及生成的文件

sudo apt-get install ccache #安装ccahe,用于编译加速
export PATH=$PATH:/home/$(whoami)/orangepi-build/toolchains/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin #导入交叉编译环境
make ARCH=arm64 distclean

2. 配置内核, 更新内核依赖属性和新属性, 生成.config

cp ../../external/config/kernel/linux-5.16-sun50iw9-current.config .config #拷贝
默认配置
make ARCH=arm64 CROSS_COMPILE="aarch64-none-linux-gnu-" olddefconfig 

•Tips

a. make olddefconfig 的作用是根据已有的 .config 文件生成一个新的 .config 文件,同时更新内核的依赖属性和新属性。它会使用旧的 .config 文件中的参数作为默认参数,不会询问用户的选择。它会将新添加的内核选项设置为默认值,也不会提醒用户。它会将旧的 .config 文件重命名为 .config.old 文件,以备后用。
b. make olddefconfig 的作用和 make oldconfig 类似,但是 make oldconfig 会以交互方式询问用户对新配置的选择,而 make olddefconfig 不会。

c. make menuconfig 是基于 Ncurses 图形界面去配置 .config 文件,它可以让用户在一个菜单式的界面中选择和修改内核的各种选项,也可以查看选项的帮助信息,它是一种比较方便和直观的配置方式

 3. 编译内核

make -j6 ARCH=arm64 'CROSS_COMPILE=ccache aarch64-none-linux-gnu-'
LOCALVERSION=-sun50iw9 Image modules dtbs

4. 接下来运行

make modules_install INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$PWD/_install
ARCH=arm64 'CROSS_COMPILE=ccache aarch64-none-linux-gnu-' #安装驱动


make install INSTALL_PATH=$PWD/_install/boot #安装内核 

 或者不走第四步,直接打包成deb包:

sudo cp external/patch/misc/headers-debian-byteshift.patch /tmp


make -j6 bindeb-pkg KDEB_PKGVERSION=3.1.0 KDEB_COMPRESS=xz BRANCH=next
LOCALVERSION="-sun50iw9" KBUILD_DEBARCH=arm64 ARCH=arm64 DEBFULLNAME="Orange Pi" CROSS_COMPILE="ccache aarch64-none-linux-gnu-”

5.如果对内核做了修改, 可以使用下面的方法来更新开发板 linux 系统的内核和内核模块 

scp linux-image-next-sun50iw9_3.1.0_arm64.deb test@192.168.0.113:/home/orangepi/ 

sudo apt purge -y linux-image-next-sun50iw9

sudo dpkg -i linux-image-next-sun50iw9_3.1.0_arm64.deb

sudo reboot -f

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

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

相关文章

如何跨渠道分析销售数据 - 7年制造业销售经验小结

如何跨渠道分析销售数据 - 7年制造业销售经验小结(1) 【前言】 在我过去7年销售工作生涯中,从第一年成为公司销冠后,我当时的确自满的一段时间,认为自己很了不起。但是第一年的销售业绩并没有拿到提成,最…

图解DSPy:Prompt的时代终结者?!

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模…

OpenCASCADE开发指南<十四>:OCCT建模类之BRepPrimAPI_MakePipe创建管道

1、OpenCasCade拓扑几何 在Open CASCADE Technology (OCCT) 中,除了基本三维几何体建模类BRepBuilderAPI外,还提供了复杂模型的建模类,常用的有如下几种,他们可以单独使用或相互组合,通过OCCT提供的融合函数进行组装。例如:BRepOffsetAPI_ThruSections、BRepOffsetAPI_Ma…

Quick BI中lod_fixed函数数据计算过程解析

一、lod_fixed函数简介 lod_fixed{[声明维度1][,声明维度2]…:聚合表达式[:过滤条件]} [维度1][,维度2]...:声明维度,一方面如果外部筛选字段若不属于这里的声明维度则无效,另一方面这里声明的维度也内部聚合运算时的分组依据。使…

明日周刊-第12期

以前小时候最期待六一儿童节了,父母总会给你满足一个愿望,也许是一件礼物也许是一次陪伴。然而这个世界上其实还有很多儿童过不上儿童节,比如某些地区的小孩子,他们更担心的是能不能见到明天的太阳。 文章目录 一周热点航天探索火…

像艺术家一样工作:前言

名人名言 “艺术是盗窃” —— 巴勃罗毕加索 “不成熟的诗人模仿,成熟的诗人偷窃;对于偷窃得到的艺术,坏的诗人丑化它,好的诗人加入自己的理解,使它变得更好,至少会让它有点不同。最优秀的诗人&#xff0…

chat2-Client发送数据给Server

本文档描述了Client发送消息给Server, Server端打印接收的消息 一、Client 1.1.客户端的类Client.java中添加如下的start()方法 (表示启动客户端功能的方法),并调用 /**start方法,作为客户端开始工作的方法*/ public void start(){ …

【SpringMVC】_SpringMVC实现用户登录

目录 1、需求分析 2、接口定义 2.1 校验接口 请求参数 响应数据 2.2 查询登录用户接口 请求参数 响应数据 4、服务器代码 5、前端代码 5.1 登录页面login.html 5.2 首页页面index.html 6、运行测试 1、需求分析 用户输入账号与密码,后端校验密码是否正确&a…

Python-3.12.0文档解读-内置函数sum()详细说明+记忆策略+常用场景+巧妙用法+综合技巧

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 详细说明 sum(iterable, /, start0) 参数: 返回值: 注意事…

【风力发电】山顶的白色“大风车”你了解吗?

文章目录 术语定义 基本要求 外部条件 电气系统 控制系统 参考资料 术语定义 风力发电机组wind turbine generator system;WTGS,将风的动能转换为电能的系统。示例如下: 支撑结构support structure,风力发电机组的塔架和基础部分。 机舱…

NVIDIA NeMo - 训练本地化多语种 LLM

本文转载自:使用 NVIDIA NeMo 训练本地化多语种 LLM (2024年 5月 17日 By Nicole Luo and Amit Bleiweiss 第 1 部分 https://developer.nvidia.com/zh-cn/blog/training-localized-multilingual-llms-with-nvidia-nemo-part-1/ 第 2 部分 https://deve…

优盘打不开的困境与解决之道

在日常的工作和生活中,优盘作为一种便携式存储设备,因其小巧、轻便和容量大等特点而备受青睐。然而,当优盘突然无法打开时,我们往往会陷入一片混乱之中,担心存储在其中的重要数据会因此丢失。本文将详细解析优盘打不开…

服务器进不去conda环境问题

source ~/.bashrc 立即重新加载和应用 .bashrc 配置文件中的设置。当你对 .bashrc 文件进行了修改,比如添加或修改了环境变量、别名(alias)、函数等功能后,通常需要执行这个命令来让这些更改在当前终端会话中生效,而无需关闭并重新打开终端。…

牛客网刷题 | BC111 空心正方形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

解决mysql5.7版本中,子查询order by后,对子查询进行group by分组获取最新记录无效的问题

目录 场景简介原因示例mysql5.7之前的版本mysql5.7之后的版本解决1、使用having2、使用limit3、使用子查询获取目标数据ID 场景简介 子查询order by后,对子查询进行group by分组获取最新记录失败 应用场景:一对多的关系,通常需要取最新、最…

牛客网刷题 | BC107 箭形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

IO流(2)

缓冲流 字节缓冲流 利用字节缓冲区拷贝文件,一次读取一个字节: public class test {public static void main(String [] args) throws IOException {//利用字节缓冲区来拷贝文件BufferedInputStream bisnew BufferedInputStream(new FileInputStream(&…

【CTF MISC】XCTF GFSJ0008 low Writeup(LSB隐写+QR Code识别)

low 暂无 解法 用 StegSolve 打开,Green plane 1 中疑似隐藏有二维码。 使用大佬写的代码: from PIL import Imageimg Image.open("./low.bmp") img_tmp img.copy() pix img_tmp.load() width, height img_tmp.size for w in range(wid…

[论文精读]Supervised Community Detection with Line Graph Neural Networks

论文网址:[1705.08415] Supervised Community Detection with Line Graph Neural Networks (arxiv.org) 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 ⭐内涵大量可视…