Linux内核编程(一)内核模块基础


  

前述:内核框架图

在这里插入图片描述

一、Linux 内核模块概述

   嵌入式设备驱动开发中将驱动程序以模块的形式发布,更是极大地提高了设备使用的灵活性,用户只需要拿到相关驱动模块,再安装到用户的内核中,即可灵活地使用你的设备。

二、Linux 模块的优点

  1. 用户可以随时扩展 Linux 系统的功能。
  2. 当设备驱动有更新时,只需要卸载旧模块,重新安装即可。
  3. 系统需要增加新的模块功能,不必重新编译内核,只要安装相应模块文件即可。
  4. 使用模块,还可以减小 Linux 内核的体积,节省 flash。
  5. 可以在不影响核心系统的情况下开发和测试新功能,降低系统崩溃或不稳定的风险。

三、知识点

1. GPL开源协议

   我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。
   GPL具有“传染性”,只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品必须也采用 GPL协议,既必须也是开源和免费。
   由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。
   GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。

2. 查看已安装的模块文件:lsmod

四、常用API

1. 入口函数

static int __init 函数名(void)
{
   
   return 0;
}

2. 出口函数

static void __exit 函数名(void)
{
   
}

3. 声明驱动模型出/入口函数

module_init(入口函数名);
module_exit(出口函数名);

4. printk内核输出函数

   printk函数是Linux内核中用于输出消息的函数。它类似于C语言中的printf函数,但是用于内核空间的打印,因此它有一些特定的用法和限制。内核中不能使用 printf 函数输出信息,要使用 printk 函数(不能在应用程序中使用),这个函数有输出等级控制的。

五、内核源码

   在编写内核时,必须要用到开发板的内核源码文件中的最底层Makefile文件。这里我使用香橙派5Plus开发,具体使用详情查看官方开发手册即可。里面有详细的步骤操作。

Linux内核模块编写1(一个c文件生成一个ko文件)
Linux内核模块编写2(多个c文件生成一个ko文件)
Linux内核模块编写3(多个c文件生成多个ko文件)

四、注意

Makefile
在这里插入图片描述

hello.c
在这里插入图片描述

相关推荐

  1. linux使用内核编译其中一个模块

    2024-06-11 16:34:06       46 阅读
  2. Linux内核(3)-内核模块结构详解

    2024-06-11 16:34:06       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 16:34:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 16:34:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 16:34:06       82 阅读
  4. Python语言-面向对象

    2024-06-11 16:34:06       91 阅读

热门阅读

  1. HTML美观的搜索框怎么做?

    2024-06-11 16:34:06       33 阅读
  2. A Brief History of Social Work

    2024-06-11 16:34:06       27 阅读
  3. 分享一些外贸的所见所闻

    2024-06-11 16:34:06       31 阅读
  4. Lambda架构优缺点

    2024-06-11 16:34:06       31 阅读
  5. 倒排文件的设计与实现

    2024-06-11 16:34:06       28 阅读
  6. 【AI应用探讨】— Gemma2模型应用场景

    2024-06-11 16:34:06       30 阅读
  7. 养老只是为了养老吗?

    2024-06-11 16:34:06       29 阅读
  8. 豆瓣电影信息爬虫【2024年6月】教程

    2024-06-11 16:34:06       31 阅读