国嵌视频学习笔记---linux内核开发1

article/2025/11/5 23:21:39

一、linux内核简介

1.linux系统由两部分组成:内核空间和用户空间。

2.用户空间包括:用户应用程序和C库

3.内核空间包括:系统调用接口、内核和体系结构相关代码。

4.ARM处理器7种工作模式:用户模式,快速中断模式、外部中断模式、管理模式、数据访问终止、系统模式、未定义指令异常

5.为什么linux系统划分为用户空间和内核空间?

出于安全的考虑,linux利用处理器的分级的工作模式的特点,使用其中两级分别运行内核和应用程序。使操作系统得到充分保护。

6.系统调用和硬件中断:使程序执行在内核空间和用户空间两个状态切换。

7.Linux内核结构(组成):

   系统调用接口:连接内核空间与用户空间

   进程管理:进程创建、进程通信、进程调度

   内存管理:内存分配回收、地址转换(虚-物理)

   体系结构相关代码:CPU相关代码

    设备驱动:

    网络协议栈:

    虚拟文件系统:

二、内核源代码

 

arch:architecture缩写。体系结构相关代码。

block:部分块设备驱动。

crypto:加密。

drivers:设备驱动

fs:文件系统

include:内核需要的头文件

lib:库文件

mm:内存管理代码(与体系结构无关的)

三、内核配置与编译

1.清除临时文件、中间文件、配置文件

make clean:删除大部分中间生成的文件保存配置文件.o

make mrproper:删除中间文件及配置文件

make distclean:在mrproper基础上删除补丁、编辑器备份等。

2.配置内核

 make config:基于文本模式的交互式配置

make menuconfig:基于文本模式的菜单型配置(菜单由内核内scripts生成)

make oldconfig:使用已有的配置文件(.config)

make xconfig:图形化配置

3.如何配置

Arch/$cpu/configs目录下有供参考的配置文件。可以在此基础上修改,进行配置。

4.编译内核

x86:

make zImage:x86下只能用于小于512k的内核。

make bzImage。

如需获取详细编译信息,后面添加V=1,如

make zImage V=1

5.编译内核模块:(必须先编译内核)

make modules

6.安装内核模块:

make modules_install

四、Linux内核模块开发

1.什么是内核模块(特点)

模块本身不被编译进内核

可以根据需求,在内核运行期间动态的安装或卸载

2.内核模块程序

   模块加载函数(必须):通过module_init宏指定。

   模块卸载函数(必须):通过module_exit宏指定。

3.内核模块编译

  通过makefile

单个文件的

ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KDIR :=/lib/modules/2.6.18-53.e15/build   //内核源代码的路径
all:
make -C $(KDIR) M=$(PWD) modules //进入-C后面的目录,使用其makefile编译;内核模块代码的位置,PWD=当前目录
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif

多个文件的

ifneq ($(KERNELRELEASE),)
obj-m := hello.o //内科模块的名字
hello-objs := main.o add.o //内核模块需要的源文件
else
KDIR :=/lib/modules/2.6.18-53.e15/build   //内核源代码的路径
all:
make -C $(KDIR) M=$(PWD) modules //进入-C后面的目录,使用其makefile编译;内核模块代码的位置,PWD=当前目录
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif

4.内核模块的安装与卸载

insmod  加载

rmmod 卸载

lsmod  查看

modprobe 加载:会查看依赖的模块,并首先加载

5.模块可选信息

  许可证声明:MODULE_LICENSE("GPL")

  作者声明:MODULE_AUTHOR

   ………………

   模块参数:module_param指定模块参数,用于在加载模块是传递参数给模块。

module_param(name,type,perm)

  name:模块参数的名称

  type:参数的类型  bool,int,charp

  perm:模块参数的访问权限 S_IRUGO :任何用户都有读权限 S_IWUSR

int a=3;
char *st;
module_param(a,int,S_IRUGO);
module_param(st,charp,S_IRUGO);

6.内核符号导出

EXPORT_SYMBOL(符号名)

EXPORT_SYMBOL_GPL(符号名):只能用于包含GPL许可证的模块。

7.内核版本不匹配问题

内核模块的版本由所依赖的内核代码版本决定。

当前正在运行的内核的版本。

insmod程序在这两个版本不同时,会出现错误。

解决办法:

(1)使用modprobe  --force-modversion强行加载

(2)确保相同,uname  -r可以查看当前运行的内核版本。


http://chatgpt.dhexx.cn/article/R4I6FGu5.shtml

相关文章

国嵌学习——ARM

从NOR启动:在片选0位置放置的是2M的nor flash,在片选6位置放置的是内存0x30000000 ARM工作模式 ARM处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。应用程序运行在用户模式下,当处理器运行在用户模式下时&…

国嵌C语言(6-10)

国嵌六: 空结构体的内存: struct D {}; int main(void) {struct D d1;struct D d2;printf("%d\n",sizeof(struct D));printf("%d,%0x\n",sizeof(d1),&d1);printf("%d,%0x\n",sizeof(d2),&d2); } 0 0&#xff…

【嵌入式】

一.进制转换:分别有以下前缀,2进制常用0B表示,8进制常用0O,16进制常用0X表示;1位八进制数等于3位二进制数,1位十六进制数等于4位二进制数,在二进制转化为八,十六进制数时。如果位数不…

关于嵌入式系统

说实话,笔者是对嵌入式有兴趣的,为什么,因为对于我这样的懒人,是希望以后出去找个稳定的工作,随着年龄的增长工资越高,经验越多,就越吃香,而不是当个最底层的码农,35岁之…

国嵌,够欠!---ARM在线教育误区

大家好,先自我介绍一下,我是国嵌学院的一个很普通的学员,因为应届生不好找工作,去培训机构培训又和上课时间冲突,所以选择了自主学习。在机缘巧合之下,购买了国嵌学院的嵌入式Linux开发课程,在此…

国嵌C语言总结(1-5)

国嵌一: 什么是数据类型? 数据类型是固定内存大小的别名,是创建变量的模子; 变量的本质? 变量是一段实际连续存储空间的别名;程序通过变量来申请并命名存储空间;通过变量的名字可以使用存储空…

使用新版IDEA创建JavaWeb项目详细图文教程

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 示例概述 三月中下旬了,答辩的日子也越来越近了。之前忙于考研的童鞋,之前忙着玩的童鞋,之前忘记做毕业设计的童鞋都开始忙碌起来了。奈…

idea2022创建javaweb项目

idea版本2022 1.2 //记录一下javaweb的创建 ​​​​​​ name项目名称 location存储地址 Application server:选择new 选中Tomact service 点击下一步 点击下一步就创建成功了

idea创建一个javaweb项目

前提 java环境以及tomcat的安装 1、IDEA创建Web项目 此处以Idea 2020.3.4举例 1、新建普通Java项目 注意:Idea2020无法直接新建JavaWeb项目,只能通过新建普通Java项目的方式间接新建JavaWeb项目。 选择项目位置和普通Java项目相同,此处略过…

java web项目_一个完整JavaWeb项目开发总结

一个JavaWeb项目开发总结 曾经,我跟朋友说我要去学Java,到现在1个月,我总算是七拼八凑的写出了我人生中的第一个Javaweb项目,虽然只是一次简单的爬虫,但是却也更坚定了我学Java的决心 就手写一份我做这次Javaweb项目得…

Linux服务器部署JavaWeb项目

目录 1.搭建JavaWeb环境1.1 安装Java环境1.2 安装 MySQL1.2.1 下载并安装 MySQL1.2.2 启动 MySQL 服务1.2.3 查看 MySQL 默认密码1.2.4 登录 MySQL1.2.5 修改密码1.2.6 为root赋值远程管理权限1.2.7 退出服务器测试 MySQL 连接1.3 安装 Tomcat 2.部署JavaWeb项目2.1 将项目打包…

javaweb项目的文件结构

javaweb项目的文件结构 1、前言 最近使用Intellij idea搭建一个springmvc的web项目时,突然发现,自己好像对web项目的文件结构不是很清晰,对于项目中应该有那些文件夹、文件夹里面又是怎么的文件、他们的作用又是什么?这些好像有点…

JavaWeb项目打包运行

简单记录下JavaWeb项目打包运行 文章目录 项目打包tomcat运行项目 一、项目打包 1.选择out输入目录路径 这里我们可以新建一个文件夹 然后选择 项目打包完就在这个目录底下 2.创建一个工件 3.这里的Name默认的是unnamed 这个 我们这里修改成项目名称 先选择output ro…

JavaWeb项目的热部署配置

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 热部署概述 我们通常期望:修改页面和Java代码后不用重新手动部署项目就可即刻生效;这就是最理想的热部署。然而;理想有多丰满&#xff0…

161个Javaweb项目免费

161个javaweb’项目加qq群&#xff08;105613691&#xff09;自取。网上一些假货我当时找半天找不到费事而且贼生气。现在分享出 如下 <% page language"java" pageEncoding"utf-8"%> <%String path request.getContextPath();String basePat…

JavaWeb项目结构使用Vue项目

提示&#xff1a;javaweb项目中引用Vue项目的案例 文章目录 前言一、JavaWeb项目结构项目启动顺序 二、Vue项目结构Vue结构粗略解释思考 三、使用Vue1、使用vue.js, 在html引用2、使用webpack 构建Vue脚手架第一步&#xff1a; 到webapp包下&#xff0c;输入命令 npm init -y第…

JavaWeb项目结构

4.1 web结构 必需严格按照一种规范来完成 咱们要开发Javaweb的程序,必需要严格参照javaweb提供的一个规范来存放我们的资源…… 结果分析如下: 注意:WEB-INF里面的程序是不可见的,必需通过我们的程序访问 现在:web.xml都不是必需的(但是我们要求必需留着)–这个web.xml可…

eclipse部署Javaweb项目

目录 0.安装Tomcat1.配置Eclipse项目的Tomcat Server2.导入Java Web项目3.设置Tomcat4.配置数据库5.运行项目 0.安装Tomcat 请自行百度搜索如何安装Tomcat&#xff0c;每个项目对Tomcat的版本要求不同&#xff0c;安装之前自行查询你的项目所需要的Tomcat版本。 1.配置Eclips…

linux 部署Javaweb项目

目录 一、配置Java环境1.正确开启linux镜像服务器 二、配置MySQL环境 三、运行Java项目1.在/opt/soft目录下找到apache-tomcat-8.5.81.tar.gz文件并解压 一、配置Java环境 1.正确开启linux镜像服务器 2.正确通过xshell工具链接linux镜像服务器 ip a 3.关闭防火墙 systemct…

IDEA 导入别人的javaweb项目进行部署

前言 我主要是进行java的springboot项目和vue项目的开发&#xff0c;但是架不住在这些框架兴起之前&#xff0c;公司内部已经是有其他的老的框架&#xff0c;我需要在这些老的框架进行修改和调整代码。原本我是使用的eclipse软件进行部署&#xff0c;也比较简单&#xff1b; …