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

一、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的两个文件

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

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

相关文章

基于Java SSM框架实现企业车辆管理系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现企业车辆管理系统演示 JSP技术 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了运动员的需求…

关于html导出word总结一

总结 测试结果不理想&#xff0c;html-to-docx 和 html-docx-js 最终导出的结果 都 差强人意&#xff0c;效果可以见末尾的附图 环境 "electron": "24.3.0" 依赖库 html-docx-js html-docx-js - npm html-to-docx html-to-docx - npm file-saver…

如何将重复方法封装为Aop切面并结合注解使用

首先要导入依赖 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId> </dependency> 编写注解 package com.yg.domain.note;import java.lang.annotation.ElementType; import java.lang.annotation.Rete…

PyCharm连接服务器 - 2

文章目录 PyCharm连接服务器-21.如何连接服务器&#xff1f;2.如何在终端窗口打开SSH连接&#xff1f;3.Terminal终端出现中文乱码的解决办法&#xff1f;4.如何查看远程服务器的树目录结构&#xff1f;5.如何配置代码同步&#xff1f;6.如何为项目配置远程服务器中的python解释…

前端 TS 语法继承 多态 修饰符 readonly 抽象类 ts 基本写法 可选 剩余参数 函数重载 接口 类(3)

继承 继承之间的叫法 A类继承了B类&#xff0c;那么A类叫做子类&#xff0c;B类叫成基类 子类 ---》派生类 基类 ---》超类&#xff08;父类&#xff09; // 继承之间的叫法 // A类继承了B类&#xff0c;那么A类叫做子类&#xff0c;B类叫成基类 // 子类 ---》派生类 // 基类 …

【C++ 程序设计入门基础】- 第4节-函数

1、函数 函数是对实现某一功能的代码的模块化封装。 函数的定义&#xff1a; 标准函数&#xff1a; 输入 n 对整数的 a、b &#xff0c;输出它们的和。 #include <iostream> #include <windows.h> using namespace std;int add(int a,int b);//函数原型声明int…

ppt怎么录屏录音并且导出?好用录屏软件推荐

ppt已经成为了日常工作与学习中必不可少的工具&#xff0c;而ppt屏幕录制功能&#xff0c;可以方便用户将他人的演讲或视频中的内容记录下来&#xff0c;以便进一步学习与研究。录制ppt演示并将其导出为视频文件&#xff0c;可以帮助我们进行分享&#xff0c;但是很多人不知道p…

uniapp 制作 wgt 包(用于 app 的热更新)

升级版本号 修改 manifest.json 的配置&#xff0c;应用版本名称和应用版本号 必须高于上一版的值。 制作 wgt 包 发布 wgt 包 打开 uni-admin 项目的升级中心 上传后会自动生成下载链接 app 的静默热更新 发布新版后&#xff0c;用户打开app&#xff0c;后台会自动下载 wgt…

【NR技术】RRC状态转移以及RRC重建立过程

1 概述 本文介绍NR RRC状态转移的过程以及RRC重建立相关的过程。 2 RRC状态转移 2.1 RRC connected 态到 RRC inactive转移 RRC connected到RRC inactive state状态转换&#xff0c;gNB由gNB- cu和gNB- du (s)组成的场景下&#xff0c;如图1所示 图1 RRC connected to RRC …

odoo17基础培训1-odoo开发基础知识准备以及odoo17开发环境安装

odoo17基础培训 一、odoo开发基础知识准备以及odoo17开发环境安装 1、odoo是什么&#xff1f; 当我介绍客户使用odoo系统作为业务管理平台时&#xff0c;有时会被问到Odoo是什么&#xff1f; 简单点&#xff0c;可以这么说&#xff1a; Odoo是一套完整的系统&#xff0c;是…

强化学习(一)简介

强化学习这一概念在历史上来源于行为心理学&#xff0c;来描述生物为了趋利避害而改变自己行为的学习过程。人类学习的过程其实就是为达到某种目的不断地与环境进行互动试错&#xff0c;比如婴儿学习走路。强化学习算法探索了一种从交互中学习的计算方法。 1、强化学习 强化学…

ftp安装与配置 云服务器 CentOS7

1、FTP的安装 #安装 yum install -y vsftpd#设置开机启动 systemctl enable vsftpd.service#启动 systemctl start vsftpd.service#停止 systemctl stop vsftpd.service#查看状态 systemctl status vsftpd.service 2、配置FTP #修改前先进行备份文件 cp /etc/vsftpd/vsftpd…

SAP PI之MessageMapping

下图是ESR配置中各种对象的关联关系&#xff0c;注意OperationMapping和MessageMapping的方向性 MsgMapping是两个MassageType之间的关系&#xff0c;用于ServiceInterface的OperationMapping中发送和接收方在Request和Response结构之间的映射&#xff0c;如果ServiceInterface…

《SRE Google 运维解密》笔记

指导思想 介绍 Google 生产环境介绍 borg 是 k8s 的前身。 拥抱风险 服务质量 现在的 SLO 没有更细粒度的划分到季度 如果划分到季度&#xff0c;需要用这个数据来限制什么或者进行什么活动&#xff1f; L1S 链路的 SLA 的签署工作已经做了很多 对于 SLA 的达成情况数据没有…

代码随想录算法训练营第七天|哈希表理论基础,454.四数相加II ,383. 赎金信 ,15. 三数之和 ,18. 四数之和

刷题建议 刷题建议与debug 代码随想录目前基本都有了视频讲解&#xff0c;一定要先看视频&#xff0c;事半功倍。写博客&#xff0c;将自己的感悟沉淀下来&#xff0c;不然会忘大家提问的时候&#xff0c;记得要把问题描述清楚&#xff0c;自己在哪一步遇到了问题&#xff0c…

AWS EC2的SSM配置(AWS云中的跳板机)

问题 开发人员需要访问AWS云中私有子网的数据库服务等&#xff0c;都需要通过EC2进行SSH隧道代理。这里假设本地已经有一款稳定优秀的SSH客户端工具&#xff0c;并且假设已经会熟练使用SSH的隧道代理。 1.创建EC2 搜索找到EC2服务&#xff0c;如下图&#xff1a; 点击“启动…

Docker 配置国内镜像源加速

1. 国内镜像源总览 名称路径中国官方镜像https://registry.docker-cn.com网易163镜像http://hub-mirror.c.163.com中科大镜像https://docker.mirrors.ustc.edu.cn阿里云镜像https://[xxx].mirror.aliyuncs.com 2. 阿里云镜像源 地址&#xff1a;https://cr.console.aliyun.c…

【开源】基于JAVA+Vue+SpringBoot的校园电商物流云平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

PLSQL启动报错:Initialization error,不能初始化

出现场景&#xff1a;我这里原来有个旧版的PLSQL&#xff0c;想用新版的又装了个新版&#xff0c;启动的时候报错 解决办法 1.核对程序位数 第一个提示明显看到是和程序位数相关的&#xff0c;不管是32位还是64位要做到向匹配 2.设置oci.dll 第二个提示可以看到是和oci.dll…

jenkins环境搭建

jenkins环境搭建 1.环境说明2.环境准备1.jdk安装2.安装Git3.安装sshpass4.安装Maven 3.安装Jenkins(war包方式安装)1.安装2.镜像加速 4.官网提供的yum方式安装5.访问 1.环境说明 keyvalue环境centos7jdk版本11git2.43.0maven3.9.6jenkins最新版本http://mirrors.jenkins-ci.or…