HelloWorld 模块

helloworld.c 代码

 1 #include <linux/init.h>
 2 #include <linux/module.h>
 3
 4 MODULE_LICENSE("Dual BSD/GPL");
 5
 6 static int hello_init(void)
 7 {
 8 printk(KERN_ALERT "Hello world\n");
 9 return 0;
10 }
11
12 static void hello_exit(void)
13 {
14 printk(KERN_ALERT "goodbye,cruel world\n");
15 }
16
17 module_init(hello_init);
18 module_exit(hello_exit);

Makefile 代码

obj-m := helloworld.o

CURRENT_DIR :=$(shell pwd)

KERNEL_DIR := /usr/src/linux-headers-$(shell uname -r)

all:
        $(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_DIR) modules

clean:
        rm -rf %.o

执行make

[email protected]:/data1/Ryan/demo/helloworld$ make
make -C /usr/src/linux-headers-3.13.0-32-generic  M=/data1/Ryan/demo/helloworld modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-32-generic‘
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-32-generic‘

加载模块

1 [email protected]:/data1/Ryan/demo/helloworld$ sudo insmod helloworld.ko
2 [email protected]:/data1/Ryan/demo/helloworld$ 

dmesg查看

1 [email protected]:/data1/Ryan/demo/helloworld$ dmesg
[178401.813566] sr 0:0:0:0: [sr0] Device not ready
[178401.813570] sr 0:0:0:0: [sr0]
[178401.813571] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[178401.813572] sr 0:0:0:0: [sr0]
[178401.813573] Sense Key : Not Ready [current]
[178401.813575] sr 0:0:0:0: [sr0]
[178401.813577] Add. Sense: Medium not present - tray closed
[178401.813579] sr 0:0:0:0: [sr0] CDB:
[178401.813580] Read(10): 28 00 00 00 02 2f 00 00 01 00
[178401.813584] end_request: I/O error, dev sr0, sector 2236
[179614.794066] helloworld: module verification failed: signature and/or  required key missing - tainting kernel
[179614.794552] Hello world
[180458.268623] goodbye,cruel world
[180514.941519] Hello world
[180549.136795] goodbye,cruel world
[181244.193514] Hello world

卸载模块

1 [email protected]:/data1/Ryan/demo/helloworld$ sudo rmmod helloworld
2 [email protected]:/data1/Ryan/demo/helloworld$ 
 
时间: 2024-12-20 10:41:31

HelloWorld 模块的相关文章

一步一步实现Linux设备驱动的Helloworld模块

学了那么多程序语言,总是有一个Hello world开头,不禁感叹Hello world的强大.呵呵,废话少说,咋们的故事当然要从这个Hello world开始. 先查看自己OS使用的内核版本[[email protected]:~]$ uname -r2.6.22-14-generic /* 这是我显示的结果 */ 如果安装系统时,自动安装了源码.在 /usr/src 目录下有对应的使用的版本目录.例如下(我是自己下的)[[email protected] :/usr/src]# lslinu

Helloworld模块之内核makefile详解

Hello World 模块以及对应的内核makefile详解 hello.c: #include <linux/module.h> //所有模块都需要的头文件 #include <linux/init.h> // init&exit相关宏 MODULE_LICENSE("GPL"); MODULE_AUTHOR("feifei"); MODULE_DESCRIPTION("hello world module")

helloworld模块

环境: HelperA64开发板 Linux3.10内核 时间:2019.01.11 目标:编译helloword模块 ? 1.当出先下面错误时候,查找问题 ? 问题为Make的时候默认为PC-X86的编译器,所以我们需要切换为arm编译器 ? 2.切换为arm编译环境: 方法一:修改/etc/bash.bashrc文件(此文件只对当前用户适用)$sudo vi /etc/bash.bashrc方法二:修改/etc/profile文件(此文件属于系统级别的环境变量,设置在里面的东西对所有用户适用

nginx自定义模块编写-根据post参数路由到不同服务器

nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器,然而当我们需要根据http包体来进行请求路由时,nginx默认的配置规则就捉襟见肘了,但是没关系,nginx提供了强大的自定义模块功能,我们只要进行需要的扩展就行了. 我们来理一下思路,我们的需求是: nginx根据http包体的参数,来选择合适的路由 在这之前,我们先来考虑另一个问题: 在nginx默认配置的支持下,能否实现服务器间的跳转呢?即类似于状态机,从一个服务器执行OK后,跳转到另一台服务器,按照规则依次传递

LINUX设备驱动程序笔记(二)构造和运行模块

         <一>:设置测试系统 首先准备好一个内核源码树,构造一个新内核,然后安装到自己的系统中.           <二>:HelloWorld模块 #include <linux/init.h> //定义了驱动的初始化和退出相关的函数 #include <linux/module.h> //定义了内核模块相关的函数.变量及宏 MODULE_LICENSE("Dual BSD/GPL"); //该宏告诉内核,该模块采用自由许可

Openwrt 编译添加模块 Package

3.  添加模块 一般我们需要建立自己的模块(package),在编译固件时可以选择是否将自己的模块编译到固件中去. 3.1. 建立package 最终helloword文件目录结构为: helloword/ ├──Makefile └── src ├── helloworld.c └── Makefile 在./openwrt/trunk/package/utils/目录下新建helloword文件夹. 然后在helloword文件夹下新建src文件夹. 3.2. 在src目录下编写hello

Nginx自定义模块编写:根据post参数路由到不同服务器

Nginx自定义模块编写:根据post参数路由到不同服务器 2014-05-05 15:27 blogread IT技术博客 字号:T | T Nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器,然而当我们需要根据http包体来进行请求路由时,Nginx默认的配置规则就捉襟见肘了,但是没关系,Nginx提供了强大的自定义模块功能,我们只要进行需要的扩展就行了. 我们来理一下思路,我们的需求是: Nginx根据http包体的参数,来选择合适的路由 在这之前,我们先来考虑另

linux驱动开发之HelloWorld

最近实习,公司项目搞的是平板开发,而我分配的任务是将驱动加载到内核中. 准备工作,必要知识了解:加载有两种方式,一种是动态加载和卸载即模块加载,另一种是直接编译进入内核:Linux内核把驱动程序划分为3种类型:字符设备.块设备和网络设备.字符设备和块设备可以像文件一样被访问.它们的主要区别不在于能否seek,而是 在于系统对于这两种类型设备的管理方式.应用程序对于字符设备的每一个I/O操作,都会直接传递给系统内核对应的驱动程序:而应用程序对于块设备的操作, 要经过系统的缓冲区管理,间接传递给驱动

解剖Nginx&#183;模块开发篇(2)ngx_http_hello_world_module 模块基本结构定义

elloWorld 是一个典型的 location 模块.什么是 location 模块?在 Nginx 中,根据作用域,有 main 模块.server 模块.location 模块. 1 模块定义 在 HelloWorld 模块中有一个 ngx_http_hello_world_module 变量,用于定义模块.它是 ngx_module_t 类型.ngx_module_t 是 ngx_module_s 的别名,其定义如下: struct ngx_module_s { ngx_uint_t