LV.13 D10 Linux内核移植 学习笔记

news2025/2/24 11:58:28

具体实验步骤在lv13day10 实验十

一、Linux内核概述

1.1 内核与操作系统

内核    

        内核是一个操作系统的核心,提供了操作系统最基本的功能,是操作系统工作的基础,决定着整个系统的性能和稳定性  

操作系统    

        操作系统是在内核的基础上添加了各种工具集、桌面管理器、库、shell、应用程序等

 

uboot中的shell命令是放在跟目录下的bin中,开发板中的shell命令是放在根文件系统中

1.2 Linux层次结构

1.3 Linux内核特点

        代码结构清晰、模块化设计  

        支持丰富的硬件平台  

        较高的稳定性  

        轻量化及较强的裁剪性  

        开放源代码  

        更新活跃、用户较多、资料丰富  

        支持丰富的网络协议  

        ... ...

二、Linux内核源码结构

2.1 Linux内核源码获取

Linux内核源码下载    

        https://www.kernel.org/  

Linux内核版本命名    

        主版本号.次版本号.修订版本  

Linux内核版本选择    

        支持对应的硬件平台    

        相对成熟的版本(资料多)    

        稳定版本(次版本号为偶数的版本一般都是稳定版)

2.2 Linux内核源码结构

平台相关代码    

        arch:    与CPU架构相关的源代码

 上图是我们用的exynos4412的处理器的源代码

平台无关代码    

        block:磁盘设备的支持                crypto:加密相关    

        drivers:设备驱动                        firmware:固件    

        fs:文件系统                                include:头文件    

        init:内核初始化                           ipc:进程间通信    

        kernel:内核核心调度机制等       lib:库    

        mm:内存管理                             net:网络协议    

        scripts:工具、脚本等                 security:安全    

        usr:打包与压缩                          virt:虚拟

帮助文档、示例程序、工具等    

        COPYING:        版权    

        CREDITS:        内核贡献者    

        README:        说明文档    

        Documentation:    帮助文档    

        Makefile:        编译管理    

        samples:        示例    

        tools:        工具    

        ... ...

三、Linux内核源码配置

指定处理器架构及编译工具    

        在Linux内核源码顶层目录下的Makefile中指定(ARCH、CROSS_COMPILE)  

导入当前处理器的默认配置    

        make <soc_name>_defconfig    

        注1:soc_name为当前使用的处理器的名字    

        注2:内核源码的arch/arm/configs下对各个厂商的soc都有一个默认配置文件。执行该命令后就会将对应的配置文件中的信息导入到源码顶层目录下的.config。文件中CONFIG_xxx=y表示内核选中了该功能,内核编译时就会将该功能对应的代码编译,内核的体积也会增大。#CONFIG_xxx is not set表示内核没有选中该功能,内核编译时该功能对应的代码不会被编译,内核的体积也会减小。

四、Linux内核源码编译

4.1 修改配置    

        默认配置只能保证内核拥有最基本的功能,我们需要根据自己的实际需求对内核做进一步的配置    

        方法1:     直接修改.config文件(不推荐)    

        方法2:     make menuconfig

4.2 make menuconfig

修改配置    

        [ ] 有两种状态         

                输入Y,显示“*”,内核中该功能被选中,相关代码会被编译进内核     

                输入N,显示“ ”,内核中该功能不被选中,相关代码不会被编译进内核    

        < > 有三种状态         

                输入Y,显示“*”,内核中该功能被选中,相关代码会被编译进内核     

                输入N,显示“ ”,内核中该功能不被选中,相关代码不会被编译进内核        

                输入M,显示“M”,内核中该功能被选为模块(被编译为独立的模块)    

        注:使用make menuconfig配置的本质还是修改.config文件

五、Linux编译内核模块

内核编译(以下命令均在内核源码的顶层目录下执行)    

        make uImage         

                编译内核(编译选为“*”的选项到内核)    

        make modules            

                编译内核模块(编译选为“M”的选项为独立模块)    

        make dtbs               

                编译设备树(将设备树源文件dts编译为二进制文件dtb)

        make clean         

                删除编译过程中产生的中间文件

make modules实验步骤:

先在顶层目录下用make menuconfig进入图形化界面,然后把DM9000选为M(将会编译成模块)。

 保存后,再回到顶层目录下用make modules命令编译模块,下图可见DM9000被编译了。

 .ko就是内核模块的意思,我们可以把dm9000.ko单独安装到linux内核,也可以单独卸载。

 

六、Linux编译设备树

 make dtbs实验步骤:

 我们复制一份和我们的设备最接近的设备树,再进行修改。

 修改当前目录下的Makefile,先搜索origen,看它是怎么编译的,我们把fs4412添加在它下方。

回到顶层目录后,用make dtbs进行编译,就会发现已经生成了fs4412的两个文件

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

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

相关文章

牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】

文章目录 前言牛客-寻找第K大、LeetCode215. 数组中的第K个最大元素【中等】题目及类型思路思路1&#xff1a;大顶堆思路2&#xff1a;快排二分随机基准点 前言 博主所有博客文件目录索引&#xff1a;博客目录索引(持续更新) 牛客-寻找第K大、LeetCode215. 数组中的第K个最大元…

Spark SQL函数定义

目录 窗口函数 SQL函数分类 Spark原生自定义UDF函数 Pandas的UDF函数 Apache Arrow框架基本介绍 基于Arrow完成Pandas DataFrame和Spark DataFrame互转 基于Pandas完成UDF函数 自定义UDF函数 自定义UDAF函数 窗口函数 分析函数 over(partition by xxx order by xxx [as…

opencv_角点检测

文章内容 一个opencv检测角点的程序 运行效果 #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>using namespace cv; using namespace std;void detectCorners(M…

定制键盘设计

方案1 stm32方案 参考 智辉君的键盘 方案2 沁恒方案 CH9328与ch9329区别&#xff1a;一个是单向&#xff0c;一个是双向。 ch9329是ch9328的升级款。 原理篇4、CH9328使用-CSDN博客https://blog.csdn.net/qq_44817843/article/details/112124822

服务器推送数据你还在用 WebSocket么?

当涉及到推送数据时,人们首先会想到 WebSocket。 的确,WebSocket 允许双向通信,可以自然地用于服务器到浏览器的消息推送。 然而,如果只需要单向的消息推送,HTTP 通过服务器发送的事件也有这种功能。 WebSocket 的通信过程如下: 首先,通过 HTTP 切换协议。服务器返回 101 状…

Shell脚本同时调用#!/bin/bash和#!/usr/bin/expect

如果你想在一个脚本中同时使用bash和expect&#xff0c;你可以将expect部分嵌入到bash脚本中。以下是一个示例&#xff1a; #!/bin/bash# 设置MySQL服务器地址、端口、用户名和密码 MYSQL_HOST"localhost" MYSQL_PORT"3306" MYSQL_USER"your_usernam…

Shiro漏洞

VULHUB部署环境 下载vulhub https://github.com/vulhub/vulhub/archive/master.zip?spma2c6h.12873639.article-detail.7.76036a98Plc8q5&filemaster.zip 进入漏洞文件夹直接部署 界面 漏洞 如果勾选记住账号&#xff0c;请求包会附带remember-me字段&#xff0c;服务…

转行做鸿蒙开发首先需要学习哪些?

随着越来越多的企业和团队开始布局鸿蒙生态&#xff0c;鸿蒙开发人才的需求也呈现出井喷式的增长。对于开发者而言&#xff0c;掌握鸿蒙开发技能不仅意味着能够抓住这个千载难逢的机遇&#xff0c;更意味着能够在未来的科技竞争中占据先机。 在这个变革的时代&#xff0c;鸿蒙开…

数据结构与算法:归并排序

数据结构与算法&#xff1a;归并排序 归并思想递归法非递归 归并思想 在讲解归并排序前&#xff0c;我们先看到一个问题&#xff1a; 对于这样两个有序的数组&#xff0c;如何将它们合并为一个有序的数组&#xff1f; 在此我们处理这个问题的思路就是&#xff1a;开辟一个新的…

码云星辰:未来运维的技术交响曲

&#x1f6a9;本文介绍 ​ 随着信息技术的迅猛发展&#xff0c;运维领域正经历着翻天覆地的变革。未来的运维工程师将需要拥有更广泛、更深入的技能&#xff0c;以适应日益复杂和多变的系统环境。本文将深入探讨运维未来的行业发展趋势&#xff0c;并详细分析需要掌握的关键技…

java web万能模板(附带防微博源码)

文章目录 java EE 项目万能模板套用创建一个java EE项目1.点击java ee2.点击finish3.一个Java ee项目创建完毕4.点击运行5.运行结果 万能模板连接数据库1.在pom.xml文件导入数据库连接所需要的依赖2.进行导入3. 导入以后刷新Maven4.找到 resources 文件。5.在resources的文件路…

【论文阅读笔记】4篇Disentangled representation learning用于图像分割的论文

4篇应用解耦表示学习的文章&#xff0c;这里只关注如何解耦&#xff0c;更多细节不关注&#xff0c;简单记录一下。 1.Robust Multimodal Brain Tumor Segmentation via Feature Disentanglement and Gated Fusion Chen C, Dou Q, Jin Y, et al. Robust multimodal brain tum…

trucksim与simulink联合仿真基于pid控制算法实现车道保持

一、pid算法原理不做过多解释自行百度&#xff0c;这里采用的是位置式pid。 效果视频&#xff1a;https://www.bilibili.com/video/BV1CN4y1p7gb/?vd_sourcea1425ad8eaf3586e891a6d0040eb89cc 二、trucksim界面操作截图 三、simulink模型截图 采用的P &#xff1b; I和…

NG+WAF实现应用安全访问

一、基本概念 什么是waf&#xff1f; Web应用防火墙&#xff08;waf&#xff09;是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品&#xff0c;WAF是一种工作在应用层的、通过特定的安全策略来专门为Web应用提供安全防护的产品。 什么是ngx_lua_…

SparkSQL——DataFrame

DataFrame Dataframe 是什么 DataFrame 是 SparkSQL中一个表示关系型数据库中 表的函数式抽象, 其作用是让 Spark处理大规模结构化数据的时候更加容易. 一般 DataFrame可以处理结构化的数据, 或者是半结构化的数据, 因为这两类数据中都可以获取到 Schema信息. 也就是说 DataFra…

2018年认证杯SPSSPRO杯数学建模B题(第一阶段)动态模糊图像全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 B题 动态模糊图像 原题再现&#xff1a; 人眼由于存在视觉暂留效应&#xff0c;所以看运动的物体时&#xff0c;看到的每一帧画面都包含了一段时间内 (大约 1/24 秒) 的运动过程&#xff0c;所以这帧画面事实上是模糊的。对电影的截图来说&…

eNSP学习——终端直连三层网关设备进行通信

VLAN 配置 一 . 功能简介 将设备中的某些接口定义为一个单独的区域&#xff0c;将指定接口加入到指定 VLAN 中之后&#xff0c;接口就可以转发 指定 VLAN 报文。从而实现 VLAN 内的主机可以直接通信&#xff0c;而 VLAN 间的主机不能直接互通&#xff0c;将广播报文 …

前端安全相关

请求后端接口必须带上sign 以上主要是解决&#xff1a;除了数据泄露外&#xff0c;一些重要功能的接口如果没有做好保护措施也会被恶意调用造成DDoS、条件竞争等攻击效果 一些营销活动类的Web页面&#xff0c;领红包、领券、投票、抽奖等活动方式很常见。此类活动对于普通用户…

Linux miniGUI移植分析

框架介绍 常用GUI程序对比 https://www.cnblogs.com/zyly/p/17378659.html MiniGUI分为底层的GAL&#xff08;图形抽象层&#xff09;和IAL&#xff08;输入抽象层&#xff09;&#xff0c;向上为基于标准POSIX接口中pthread库的Mini-Thread架构和基于Server/Client的Mini-L…

WebGL中开发AR应用

WebGL在本质上是用于在浏览器中进行3D和2D图形渲染的技术&#xff0c;而增强现实&#xff08;AR&#xff09;通常需要与现实世界的环境进行交互。要在WebGL中开发AR应用&#xff0c;您可以采取以下步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专…