iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux内核设备驱动之Linux内核基础笔记整理
  • 412
分享到

Linux内核设备驱动之Linux内核基础笔记整理

linux内核基础linux内核设备驱动程序 2022-06-04 22:06:15 412人浏览 独家记忆
摘要

1. linux内核驱动模块机制 静态加载, 把驱动模块编进内核, 在内核启动时加载 动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载 2. 编写内核驱动 #include <linux/modul

1. linux内核驱动模块机制

静态加载, 把驱动模块编进内核, 在内核启动时加载
动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载

2. 编写内核驱动


#include <linux/module.h>
#include <linux/init.h>
static int __init test_init(void) 
{
return 0; //返回0表示成功, 返加负数退出加载模块
}
//__init 当内核把驱动初始化完后, 释放此函数的代码指令空间

static void __exit test_exit(void)
{
....
}
//__exit 指定此函数只在驱动卸载时使用, 用完后释放
module_init(test_init); //指定test_init为模块初始化函数
module_exit(test_exit); //指定test_exit为模块退出时卸载函数
MODULE_LICENSE("GPL"); //指定所支持的协议
MODULE_AUTHOR("作者");
MODULE_DESCRIPTioN("描述");
MODULE_VERSION("版本");
#define __init __section(.init.text)
#define __initdata __section(.init.data)
char __initdata buf[] = "hello world";
#define __exitdata __section(.exit.data)
#define __exit __section(.exit.text)
/////////////

modinfo test.ko 查看模块的信息

cat /proc/modules 查看当前系统的动态加载模块  相当于lsmod

test 1768 0 - Live 0xbf03c000

模块名, 使用的内存大小, 调用次数,  有效 , 模块所在的内存地址 

ls /sys/module 查看所有模块

3. 驱动模块的Makefile

  • obj-m  += test.o   //源码文件为test.c
  • modules:make -C 内核源码目录 M=驱动代码所在目录 modules
  • modules install:make -C 内核源码目录 M=驱动代码所在目录 modules_install      INSTALL_MOD_PATH=/文件系统路径
  • clean:make -C 内核源码目录 M=驱动代码所在目录 modules clean

4. 查看驱动输出的消息


cat /var/log/messages
tail /var/log/messages

5. printk的级别控制

/usr/src/kernels/2.6.18-194.el5-i686/include/linux/kernel.h


<linux/kernel.h>
#define KERN_EMERG "<0>" 
#define KERN_ALERT "<1>" 
#define KERN_CRIT "<2>" 
#define KERN_ERR "<3>" 
#define KERN_WARNING "<4>" 
#define KERN_NOTICE "<5>" 
#define KERN_INFO "<6>" 
#define KERN_DEBUG "<7>" 

默认的级别为 KERN_WARNING "<4>"

使用 : printk(KERN_INFO"内容");

查看当前内核的输出级别 cat /proc/sys/kernel/printk
7       4       1       7
  7:console_loglevel 
4:default_message_loglevel 
1:minimum_console_loglevel
7:default_console_loglevel

当printk函数使用的级别小于当前console_loglevel级别时, 则可以输出, 否则不输出

修改级别输出  echo 8 > /proc/sys/kernel/printk

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

--结束END--

本文标题: Linux内核设备驱动之Linux内核基础笔记整理

本文链接: http://www.lsjlt.com/news/20054.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux内核时钟驱动的基本概念
    这篇文章主要讲解了“Linux内核时钟驱动的基本概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux内核时钟驱动的基本概念”吧!1 基本概念 首先,有必要明确一些Linux内核时钟驱...
    99+
    2023-06-16
  • Linux内核驱动开发的EXPORT_SYMBOL
    EXPORT_SYMBOL是Linux内核中的一个宏,用于将一个符号(函数、变量等)导出给其他模块使用。在Linux内核中,有一些符...
    99+
    2023-09-28
    Linux
  • 如何理解Linux驱动中内核互斥锁
    如何理解Linux驱动中内核互斥锁,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 互斥体概述信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mut...
    99+
    2023-06-15
  • 如何理解Linux内核驱动的编码风格
    本篇文章给大家分享的是有关如何理解Linux内核驱动的编码风格,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代...
    99+
    2023-06-16
  • Linux内核进程管理的基础是怎样的
    本篇文章为大家展示了Linux内核进程管理的基础是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。内核通过 task_struct 描述进程用命令 pstree 可以让内核以树形的结构把进程之间...
    99+
    2023-06-15
  • Linux基础命令---dmsg显示内核输出
    dmesgdmesg指令用来打印和控制内核的输出信息,这些信息保存早ring buffer中。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、Fedora、SUSE、openSUSE。 1、语法dmesg&n...
    99+
    2023-06-05
  • linux内核和驱动的关系是什么
    Linux内核和驱动之间的关系是密切相关的。Linux内核是一个操作系统的核心,它负责管理计算机的硬件资源、提供系统调用接口等。而驱...
    99+
    2023-10-20
    linux
  • Linux 4.3内核增加了什么驱动子系统
    这篇文章主要介绍了Linux 4.3内核增加了什么驱动子系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。当Linux 4.2 内核还没有正式发布的时候,Greg Kroah...
    99+
    2023-06-16
  • Linux内核驱动中对文件的读写方式
    这篇文章主要讲解了“Linux内核驱动中对文件的读写方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux内核驱动中对文件的读写方式”吧!1. 打开文件filp_open()在kern...
    99+
    2023-06-16
  • 从内核到周边:设备驱动程序的奥德赛
    内核与用户空间 设备驱动程序的旅程始于内核。内核是操作系统的心脏,控制计算机硬件并管理系统资源。它提供了一个抽象层,使应用程序无需直接与硬件交互即可访问设备。 中断与数据结构 当设备需要内核注意时,它会生成中断。内核会响应中断,并调用适当...
    99+
    2024-04-02
  • Linux五大模块内核源码以及内核整体架构设计的示例分析
    小编给大家分享一下Linux五大模块内核源码以及内核整体架构设计的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、前言本文是“Linux内核源码分析”系...
    99+
    2023-06-29
  • Linux内核驱动fsync机制实现过程是怎样的
    Linux内核驱动fsync机制实现过程是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Linux内核中的IO模型基本分为4类: 1、同步阻塞I/O 2、同步非阻塞I/...
    99+
    2023-06-13
  • Java+Linux内核源码之如何理解多线程之进程
    这篇文章主要讲解了“Java+Linux内核源码之如何理解多线程之进程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java+Linux内核源码之如何理解多线程之进程”吧!Linux 内核如...
    99+
    2023-06-15
  • Linux Tcp内核协议栈Packet Drill基本原理是什么
    本篇内容介绍了“Linux Tcp内核协议栈Packet Drill基本原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux ...
    99+
    2023-06-15
  • 基于Linux内核新特性的网关设计方法是什么
    今天小编给大家分享一下基于Linux内核新特性的网关设计方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。UCloud...
    99+
    2023-06-16
  • 如何显示Linux系统的内置模块和设备驱动列表
    这篇文章主要讲解了“如何显示Linux系统的内置模块和设备驱动列表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何显示Linux系统的内置模块和设备驱动列表”吧!提问:我想要知道Linux...
    99+
    2023-06-12
  • Linux内核如何打造WWAN子系统以发展通用驱动并加强扩展能力
    本篇文章给大家分享的是有关Linux内核如何打造WWAN子系统以发展通用驱动并加强扩展能力,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Linaro继续领导Linux内核的无线...
    99+
    2023-06-15
  • 【Linux】基础IO --- 内核级和用户级缓冲区、磁盘结构、磁盘的分治管理、block group块组剖析…
    出身寒微,不是耻辱。能屈能伸,方为丈夫。 文章目录 一、缓冲区(语言级:IO流缓冲,内核级:块缓冲)1.观察一个现象2.理解缓冲区存在的意义(节省进程IO数据的时间)3.语言级缓冲区的刷新策略(三种策略,两种特殊情况)4.语言级缓...
    99+
    2023-08-18
    linux 运维 服务器
  • 【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接
    🍎作者:阿润菜菜 📖专栏:Linux系统编程 这是目录 理解缓冲区1.观察调用C库接口的现象2.理解缓冲区存在的意义(节省进程IO数据的时间)3.调用系统接口对文件进行封装 --- 模仿C库设...
    99+
    2023-08-18
    linux 运维 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作