热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

内核之旅起航---简单内核模块和内核编程规则

    &nbs

                                                                                                     内核模块与内核编程一些常识

首先把我之前的hello word 模块加载失败问题解决了。

首先:

更新内核,yum update kernel 安装内核开发树。

     内核模块hello word 代码:

#include          //内核相关函数的头文件,内核编程不能调用C库
#include

MODULE_LICENSE("Dual BSD/GPL"); //用来告诉内核,这个模块遵循的许可

static int hello_init(void) //初始化模块
{
printk("the first modules\n\n");
printk(KERN_ALERT "hello ,world\n");
return 0;

}

static void hello_exit(void) //清除模块
{
printk(KERN_ALERT "GOODBYE,cure1 world\n");
}

module_init(hello_init); //这两个宏分别注册初始化模块函数,注册退出函数
module_exit(hello_exit);


下面是makefile 

obj-m += hello.o
DIR:=$(shell pwd)
K_DIR:=$(shell uname -r)
k_path := /usr/src/kernels/$(K_DIR)

all:
make -C $(k_path) M=$(DIR) modules

这个makefile 还有点缺点,就是没有clean ,不过对于这个演示并没有什么影响。


这个是编译结果:


然后是载入


但是并没有我们期待的输出。

这是因为根据系统传递消息的机制不同,得到的结果可能是不一样的,有的系统输出在终端,有的系统输出在某些文件里。

可是不论它输出在那里,都是从内核缓冲区出来的,所以我们可以使用dmesg 来查看内核缓冲区中的东西。


果然是OK 的。到这里这个模块就算是OK了。

下面是一些内核编程的规则和规范吧。

@前边有__的函数,一般就是接口的底层组件,应当谨慎使用,。本质是告诉程序员:“谨慎调用,否则后果自负”。

@不论代码是否使用,就算是睡眠的也一定要考虑并发的问题。

@少使用typedef 关键字

@内存的使用精打细算,能节省多少内存就减少多少内存。

@效率第一Linux内核的宗旨


推荐阅读
  • 线程池是一种预先创建并维护多个线程的机制,以便在需要时能够快速响应任务请求,避免了频繁创建和销毁线程的开销。本文将详细介绍如何使用C语言在Linux环境中构建一个高效且动态的线程池,以提高系统性能和资源利用率。通过合理的设计和优化,该线程池能够在高并发场景下表现出色,适用于各种服务器端应用。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 本文详细解析了蓝桥杯选拔赛中Scratch少儿编程的购物程序设计与实现。首先介绍了题目要求,随后通过具体的编程步骤,展示了如何在Scratch环境中构建一个功能完整的购物程序。文章还涵盖了关键代码的解释和调试技巧,旨在帮助初学者更好地理解和掌握编程逻辑。 ... [详细]
  • 将Jar包部署至Linux服务器的详细步骤与注意事项
    将Jar包部署至Linux服务器的详细步骤及注意事项包括:首先使用 `mvn install` 命令进行Jar包的打包构建。接着,需要停止当前正在运行的Jar进程,可以通过 `ps -ef | grep **.jar` 查找对应的进程ID(PID),然后使用 `kill -9 ` 终止该进程。最后,使用 `rm` 命令删除旧的Jar包文件,确保新版本能够顺利部署。在整个过程中,务必确保操作的准确性和安全性,避免对服务器造成不必要的影响。 ... [详细]
  • 蓝桥竞赛中的回形取数问题是一个经典的算法挑战。本文详细解析了该问题的正确实现代码,重点探讨了 `hasNext()` 和 `next()` 方法的区别与应用。尽管两者在功能上类似,都会等待用户输入下一个字符,但它们的返回值类型不同,`hasNext()` 返回一个布尔值,表示是否还有输入,而 `next()` 则直接返回下一个输入的值。通过具体的代码示例和详细的逻辑分析,本文为参赛者提供了宝贵的参考和指导。 ... [详细]
  • PHPCMS全站迁移时URL地址的更新与替换策略 ... [详细]
  • 在Linux系统中,通过使用`read`和`write`函数可以实现文件的高效复制操作。`open`函数用于打开或创建文件,其返回值为文件描述符,成功时返回一个有效的文件描述符,失败时返回-1。`path`参数指定了要操作的文件路径,而`oflag`参数则定义了文件的打开模式和属性。此外,为了确保数据的完整性和一致性,还需要合理处理文件读取和写入过程中的错误和异常情况。 ... [详细]
  • 在Ubuntu上安装MySQL时解决缺少libaio.so.1错误及libaio在MySQL中的重要性分析
    在Ubuntu系统上安装MySQL时,遇到了缺少libaio.so.1的错误。本文详细介绍了如何解决这一问题,并深入探讨了libaio库在MySQL性能优化中的重要作用。对于初学者而言,理解这些依赖关系和配置步骤是成功安装和运行MySQL的关键。通过本文的指导,读者可以顺利解决相关问题,并更好地掌握MySQL在Linux环境下的部署与管理。 ... [详细]
  • Vi编辑器的工作模式有哪些?如何在不同模式间切换?
    Vi编辑器是Linux系统中常用的文本编辑工具,具备三种主要工作模式:命令模式、插入模式和底行模式。用户可以通过特定的按键组合在这些模式之间进行切换,以实现不同的编辑功能。例如,在命令模式下,用户可以执行移动光标、删除文本等操作;而在插入模式下,则可以输入或修改文本内容。底行模式则用于执行保存文件、退出编辑器等命令。 ... [详细]
  • Python默认字符解析:深入理解Python中的字符串处理
    在Python中,字符串是编程中最基本且常用的数据类型之一。尽管许多初学者是从C语言开始接触字符串,通常通过经典的“Hello, World!”程序入门,但Python对字符串的处理方式更为灵活和强大。本文将深入探讨Python中的字符串处理机制,包括字符串的创建、操作、格式化以及编码解码等方面,帮助读者全面理解Python字符串的特性和应用。 ... [详细]
  • WebStorm 是一款强大的集成开发环境,支持多种现代 Web 开发技术,包括 Node.js、CoffeeScript、TypeScript、Dart、Jade、Sass、LESS 和 Stylus。它为开发者提供了丰富的功能和工具,帮助高效构建和调试复杂的 Node.js 应用程序。 ... [详细]
  • 如何在Linux系统中实现Windows风格的桌面环境:将Ubuntu 18.04定制为Windows主题界面
    如果您是从Windows转到Linux系统的用户,可能会觉得默认的Ubuntu主题和桌面环境缺乏吸引力和可定制性。尤其是对于习惯了Windows风格的任务栏和主题的用户,Ubuntu 18.04的橙色主题可能显得过于简洁。为了提升用户体验,可以通过安装特定的桌面环境和主题来实现类似Windows的界面效果。本文将详细介绍如何在Ubuntu 18.04中配置和定制桌面环境,使其具备Windows风格的外观和功能。 ... [详细]
  • 在 Ubuntu 22.04 LTS 系统中安装 HPLIP 的详细步骤与注意事项
    HPLIP 是 HP 官方提供的软件套件,旨在支持多种 HP 打印机型号,如 Deskjet、Officejet、Photosmart、PSC、Business Inkjet 和 LaserJet 等。本文详细介绍了在 Ubuntu 22.04 LTS 系统中安装 HPLIP 的步骤,并提供了重要的注意事项,确保用户能够顺利配置和使用 HP 打印设备。 ... [详细]
author-avatar
kkka姐姐_244
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有