Kernel(一):基础

        本文主要讨论210的kernel基础相关知识。

内核驱动
       
 驱动是内核中的硬件设备管理模块,工作在内核态,程序故障可能导致内核崩溃,程序漏洞会使内核不安全
        根文件系统提供根目录,进程存放在根文件系统中,内核启动最后会装载根文件系统
        应用程序不属于内核,在内核之上的用户态,受内核的限制
        模块化是内核功能模块代码此独立(不同文件夹和.c文件)的,目的是实现功能模块耦合
        模块化:可裁剪,便于编译(条件编译便于功能模块的添加和取消)和安装

linux内核源码树目录

        arch:硬件体系结构相关的代码(主)
 
        block:部分块设备驱动程序(主)
 
        crypto:常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法。
 
        Documentation:关于内核各部分的通用解释和注释。
 
        drivers:设备驱动程序,每个不同的驱动占用一个子目录(主)
 
        fs:各种支持的文件系统,如ext、fat、ntfs等。
 
        include:头文件。系统相关的头文件被放置在linux子目录下(主)
 
        init:内核初始化代码(注意不是系统引导代码)。
 
        ipc:进程间通信的代码。
 
        kernel:内核的最核心部分,包括进程调度、定时器等,和平台相关的一部分代码放在arch/*/kernel目录下(主)
 
        lib:库文件代码(主)
 
        mm:内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下(主)
 
        net:网络相关代码,实现了各种常见的网络协议(主)
 
        scripts:用于配置内核文件的脚本文件。
 
        security:主要是一个SELinux的模块。
 
        sound:常用音频设备的驱动程序等。
 
        usr:实现了一个cpio(文件备份程序及文件格式)。

        firmware:固件代码(210的iROM代码)

        tools:工具

        virt:内核虚拟化相关

        Kbuild:linux内核特有内核编译体系文件(主)

        Makefile:主makefile(主)

        Kconfig内核配置体系文件(主)

内核配置原理
      
  make xx_defconfig和make menuconfig用于生成.config文件
        make xxx_defconfig生成大部分配置项,make menuconfig用于其他配置项生成
        .config文件在内核在编译过程中读取,指导编译链接过程
        make x210ii_qt_defconfig即为拷贝arch/arm/configs/x210ii_qt_defconfig为.config
        make menuconfig中的每个选择项对应.config的配置项

make menuconfig原理和操作

        原理

                menuconfig是linux内核图形化界面配置
                ncurses库用于实现文字图形界面
                scripts\kconfig\lxdialog目录为menuconfig源代码

        操作

                /:查找  

                ?:帮助信息

                 --->:有子菜单的

                 高亮字母:快捷键

                Y:编入内核

                N:不编译

                M:编入模块(.ko文件)

                []:可模块化

                <>:可模块化

                *:编入内核

                空白:不编译


menuconfig读取Kconfig文件

        menuconfig菜单由内核源码各个目录的Kconfig文件支持
        Kconfig文按格式包含各配置项,make menuconfig会生成对应的菜单项
        menuconfig中菜单目录结构和源码目录Kconfig目录结构相同
        make menuconfig修改保存及修改保存的为.config文件
        menuconfig读取和写入.config文件对应的配置(CONFIG_xxx=y,CONFIG_xxx=m,n则被#号注释)


Kconfig文件

        menuconfig程序可Kconfig文件格式,读取信息组成菜单项
        #开头是注释行,menuconfig功能菜单有配置项,config功能菜单无配置项
        menuconfig或config后的参数XXX(如NETDEVICES) 为配置项名,CONFIG_XXX为.config中定义的配置项
        menuconfig下的config为他的子菜单
        Kconfig会source子目录Kconfig保证Kconfig下可包含menuconfig中
        linux内核模块功能文件夹添加:文件夹下创建Kconfig,上层目录Kconfig中source引入文件夹下的Kconfig
        tristate(包含Y、N、M编译方式),bool(包含Y、N编译方式)
        depends on XXX为依赖配置项(类似ifdefine),依赖.config配置文件中的配置项(CONFIG_xxx=x),配置项为Y/M/N,N无意义,
        help为帮助信息(?==kconfig的---help---内容)

 

文件关系

        menuconfig和.config:make menuconfig会读取或修改.config配置值(y/m,n为#注释)
        menuconfig和Kconfig:Kconfig为menuconfig菜单内容,修改Kconfig可修改(增删改)menuconfig菜单内容
        menuconfig和Makefile:Makefile依据menuconfig修改后的.config的功能配置(y,m,#)决定内核成zImage是否包含该功能或生成功能模块(.ko)
        Kconfig和.config文件和Makefile:Kconfig决定menuconfig的内容,menuconfig可修改.config文件,.config文件中配置项决定Makefile是否编译功能(模块或编进内核)
        网卡DM9000:Kconfig(.config中CONFIG_ARM=y ==> depends on ARM || BLACKFIN || MIPS)==>menuconfig(DM9000 support:Y、N、M)==>.config(CONFIG_DM9000=y)==>(obj-$(CONFIG_DM9000) += dm9000.o)

            网卡DM9000:配置文件图例    

           .config      

         kernel/drivers/net/Kconfig

         .config

 

        Makefile

demo:

        内核配置和编译(210已烧录uboot,ubuntu已搭建tftp)

安装ncurses库(make menuconfig需要)apt-get install libncurses5-dev -y修改交叉编译工具链vim MakefileCROSS_COMPILE   ?= /root/arm-2009q3/bin/arm-none-linux-gnueabi-清除编译make distclean生成配置文件(.config)make x210ii_qt_defconfig编译make -j4编译完后得到内核镜像在zImage(arch/arm/boot),可烧录cp kernel/arch/arm/boot/zImage ~/tftp

        烧录结果:

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

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

相关文章

1828_ChibiOS中的对象FIFO

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 最初的这个理解&#xff0c;当看到后面之后就知道有点偏差了。其实&#xff0c;这个传输就是一个单纯的FIFO而不是两个FIFO之间的什么操作。 2.…

去掉参数中第一个“,”

记录一下&#xff0c;前端传参中&#xff0c;传给我参数是“categoryIds: ,1731557494586241026,1731569816263311362,1731569855534579713,1731858335179223042,1731858366821052418” 但是后端&#xff0c;因为我的mybati是in查询&#xff0c;所以因为第一个是“,”。所以会导…

sap增强

四代增强 2种显示增强1种隐式增强 隐式增强 光标放在增强点或其中的代码点击修改即可修改代码 显示增强 1.ENHANCEMENT-POINT 在代码修改界面选择空行 光标所在位置 可以创建多个增强实施且激活后都会执行. 2.ENHANCEMENT-SECTION 1,选中程序中空行 2.编辑->创建选项 …

回顾2023 亚马逊云科技 re_Invent,创新AI,一路同行

作为全球云计算龙头企业的亚马逊云科技于2023年11月27日至12月1日在美国拉斯维加斯举办了2023 亚马逊云科技 re:Invent&#xff0c;从2012年开始举办的亚马逊云科技 re:Invent 全球大会,到现如今2023 亚马逊云科技 re:Invent&#xff0c;回顾历届re:Invent大会&#xff0c;亚马…

C++『异常』

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2022 版本 17.6.5 文章目录 &#x1f307;前言&#x1f3d9;️正文1.异常基本概念1.1.C语言异常处理方式1.2.C异常处理方式 2.异常的使用2.1.异常…

在线网页生成工具GrapesJS

项目地址 https://github.com/GrapesJS/grapesjshttps://github.com/GrapesJS/grapesjs 项目简述 这是一个基于node.js的在线网页生成项目&#xff0c;对简化开发有很大的帮助。 主要使用的语言如下&#xff1a; 编辑页面如下&#xff1a; 使用也很简洁 具体可以看下项目。…

12. MySQL 锁机制

目录 概述 MylSAM引擎 InnoDB引擎 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff08;避免争抢&#xff09;。在数据库中&#xff0c;除传统的计算资源(如CPU、RAM、I/O等&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资如何保证数据…

2023年第十届GIAC全球互联网架构大会-核心PPT资料下载

一、峰会简介 谈到一个应用&#xff0c;我们首先考虑的是运行这个应用所需要的系统资源。其次&#xff0c;是关于应用自身的架构模式。最后&#xff0c;还需要从软件工程的不同角度来考虑应用的设计、开发、部署、运维等。架构设计对应用有着深远的影响&#xff0c;它的好坏决…

Leetcode659. 分割数组为连续子序列

Every day a Leetcode 题目来源&#xff1a;659. 分割数组为连续子序列 解法1&#xff1a;哈希 贪心 定义两个哈希表&#xff1a; numsCount&#xff1a;统计数组 nums 中各元素出现次数。tailCount&#xff1a;存储以数字 i 结尾的且符合题意的连续子序列个数。 算法&a…

极兔单号查询,极兔快递物流查询,一键筛选出退回件

批量查询极兔快递单号的物流信息&#xff0c;一键筛选出其中的退回件。 所需工具&#xff1a; 一个【快递批量查询高手】软件 极兔快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左上角的…

【Bootloader学习理解----跳转优化异常】

笔者接着来介绍一下Bootloader的跳转代码以及优化 1、跳转代码理解 跳转代码可能要涉及到芯片架构的知识,要跳转到对应的位置&#xff0c;还要设置相关的SP 堆栈指针&#xff0c;具体可以参考笔者这篇文章BootLoader的理解与实现。 STM32的跳转代码如下所示&#xff1a; u32 …

基于以太坊的智能合约开发Solidity(基础篇)

参考教程&#xff1a;基于以太坊的智能合约开发教程【Solidity】_哔哩哔哩_bilibili 1、第一个程序——Helloworld&#xff1a; //声明版本号&#xff08;程序中的版本号要和编译器版本号一致&#xff09; pragma solidity ^0.5.17; //合约 contract HelloWorld {//合约属性变…

Python轴承故障诊断 (四)基于EMD-CNN的故障分类

目录 前言 1 经验模态分解EMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 2.3 故障数据的EMD分解可视化 2.4 故障数据的EMD分解预处理 3 基于EMD-CNN的轴承故障诊断分类 3.1 训练数据、测试数据分组&#xff0c;数据分batch 3.2 定义…

stu05-前端的几种常用开发工具

前端的开发工具有很多&#xff0c;可以说有几十种&#xff0c;包括记事本都可以作为前端的开发工具。下面推荐的是常用的几种前端开发工具。 1.DCloud HBuilder&#xff08;轻量级&#xff09; HBuilder是DCloud&#xff08;数字天堂&#xff09;推出的一款支持HTML5的web开发…

硬件开发笔记(十四):RK3568底板电路LVDS模块、MIPI模块电路分析、LVDS硬件接口、MIPI硬件接口详解

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134634186 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

软考高级备考-系统架构师(机考后新版教材的备考过程与资料分享)

软考高级-系统架构设计师 考试复盘1.考试结果2.备考计划3.个人心得 资料分享 考试复盘 1.考试结果 三科压线过&#xff0c;真是太太太太太太太幸运了。上天对我如此眷顾&#xff0c;那不得不分享下我的备考过程以及一些备考资料&#xff0c;帮助更多小伙伴通过考试。 2.备考…

time模块(python)

一.sleep休眠 [rootrhel8 day04]# vim demo01_time.py import time def banzhuan():print("搬砖")time.sleep(3.5) #让程序休眠3.5秒print("结束")banzhuan()[rootrhel8 day04]# python3 demo01_time.py 搬砖 结束运行时&#xff0c;会发现程序中间暂停…

【3DsMax】制作简单的骨骼动画

效果 步骤 首先准备4个板子模型展开放置好 添加一个4段的骨骼 选中其中的一块板子添加蒙皮命令 在蒙皮的参数面板中&#xff0c;设置每块板子对应哪块骨骼 设置好后你可以发现此时就已经可以通过骨骼来控制模型了 接下来就可以制作动画 点击左下角“时间配置”按钮 设置一下动…

HarmonyOS--ArkTS(1)--基本语法(1)

目录 基本语法概述 声明式UI描述 自定义组件 创建自定义组件 自定义组件的结构--struct &#xff0c;Component&#xff0c;build()函数 生命周期 基本语法概述 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中Entry、C…

VSCode安装与使用

VS Code 安装及使用 1、下载 进入VS Code官网&#xff1a;地址&#xff0c;点击 DownLoad for Windows下载windows版本 注&#xff1a; Stable&#xff1a;稳定版Insiders&#xff1a;内测版 2、安装 双击安装包&#xff0c;选择我同意此协议&#xff0c;再点击下一步 选择你…