1、环境搭建

vmware+Fedora

2、创建一个Hello文件

[root@localhost ~]# mkdir Hello

3、在Hello里面创建 hello.c 和 Makefile 两个文本文件

(1):创建hello.c

[root@localhost Hello]# vim hello.c

hello.c:

#include <linux/init.h>
#include <linux/module.h> #include <linux/kernel.h> # 后来加的
#include <linux/configfs.h>  # 后来加的
  

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
printk(KERN_EMERG "hello module!\n");
return 0;
} static void hello_exit(void)
{
printk(KERN_EMERG "bye module!\n");
}
module_init(hello_init);
module_exit(hello_exit);
// "GPL" 是指明了 这是GNU General Public License的任意版本

// “GPL v2” 是指明 这仅声明为GPL的第二版本

// "GPL and addtional"
// "Dual BSD/GPL"
// "Dual MPL/GPL" // "Proprietary" 私有的 // 除非你的模块显式地声明一个开源版本,否则内核会默认你这是一个私有的模块(Proprietary)。

(2):创建Makefile

[root@localhost Hello]# vim Makefile

Makefile:

obj-m := hello.o
KERNELDR := /usr/src/kernels/2.6.-.el6.i686
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDR) M=$(PWD) modules
clean:
rm -rf *.o

(3)make编译:

(4)加载模块

[root@localhost Hello]# insmod hello.ko

(5)卸载模块

[root@localhost Hello]# rmmod hello.ko

(6)列出模块

[root@localhost Hello]# lsmod

出现错误:

make编译的时候可能会出现下面的错误:

[root@localhost Desktop]# make
make -C /usr/src/kernels/2.6.-.el6.i686 M=/root/Desktop modules
make[]: Entering directory `/usr/src/kernels/2.6.-.el6.i686'
make[]: *** No rule to make target `/root/Desktop/hell.c', needed by `/root/Desktop/hell.o'. Stop.
make[]: ***
[_module_/root/Desktop] Error

向内核插入新模块时,出现了File exists错误,说明模块名称有冲突,

解决措施:

最后将模块相关的c代码文件名改掉,更新Makefile中的 obj-m := xxx.o

例如:文件名hello.c 更改成 hello.c

然后更改Makefile文件内容:

编译模块,insmod 成功。

Linux嵌入式内核模块程序设计的更多相关文章

  1. 与一线Linux嵌入式开发project师的对话

    转:与一线Linux嵌入式开发project师的对话 陈project师一直做Linux的嵌入式开发.作为在开发一线的project师.他对非常多问题的看法可能更切合实际需求,于是,通过邮件.就嵌入式 ...

  2. 专访Linux嵌入式开发韦东山操作系统图书作者--转

    CSDN学院讲师韦东山:悦己之作,方能悦人 发表于2015-04-28 08:09| 6669次阅读| 来源CSDN| 24 条评论| 作者夏梦竹 专访Linux嵌入式开发韦东山操作系统图书作者 摘要 ...

  3. Linux嵌入式系统与硬件平台的关系

    一. Linux嵌入式系统 操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口.它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合 ...

  4. Linux 驱动程序/内核模块/ko文件

    Linux 驱动程序/内核模块/ko文件 一.内核模块加载机制 1.解析 Linux 内核可装载模块的版本检查机制 二.驱动/内核模块 编译 1.The Linux Kernel Module Pro ...

  5. 自己动手设计并实现一个linux嵌入式UI框架(设计)

    看了"自己动手设计并实现一个linux嵌入式UI框架"显然没有尽兴,因为还没有看到庐山真面目,那我今天继续,先来说说,我用到了哪些知识背景.如:C语言基础知识,尤其是指针.函数指针 ...

  6. Linux嵌入式 -- 内核 (arm) & 文件系统

    1. make distclean 2. 配置内核  ----> 生成 .config文件 make menuconfig ARCH=arm Makefile文件分析: 3.  编译内核 mak ...

  7. 嵌入式实时程序设计中C/C++代码的优化

    1 引言 计算机技术和信息技术的高速发展的今天,计算机和计算机技术大量应用在人们的日常生活中,嵌入式计算机也得到了广泛的应用.嵌入式计算机是指完成一种或多种特定功能的计算机系统,是软硬件的紧密结合体. ...

  8. 嵌入式linux插入内核模块Error: could not insert module xxx.ko: Device or resource busy处理

    设备号冲突导致 处理方法: 1.输入$cat /proc/devices 查看驱动的设备号 2.选择一个不冲突的设备号进行编译 参考文献: 1.http://blog.csdn.net/zzc_19/ ...

  9. Linux嵌入式文件系统(网络文件系统)

    <文件系统定义> 怎么将文件和文件目录加载到linux内核中,这一种加载的方式就叫做文件系统 <建立根文件系统目录和文件> <创建目录> 1)在linux系统中使用 ...

随机推荐

  1. HDU 2680 Choose the best route(多起点单终点最短路问题)题解

    题意:小A要乘车到s车站,他有w个起始车站可选,问最短时间. 思路:用Floyd超时,Dijkstra遍历,但是也超时.仔细看看你会发现这道题目好像是多源点单终点问题,终点已经确定,那么我们可以直接转 ...

  2. 【日志过滤】Nginx日志过滤 使用ngx_log_if不记录特定日志

    ngx_log_if是Nginx的一个第三方模块.它在Github上的描述是这样介绍的:ngx_log_if是一个独立的模块,允许您控制不要写的访问日志,类似于Apache的"CustomL ...

  3. windows下hadoop安装配置(转载)

    Windows平台安装配置Hadoop 步骤: 1. JDK安装(不会的戳这) 2. 下载hadoop2.5.2.tar.gz,或者自行去百度下载. 3. 下载hadooponwindows-mast ...

  4. 使用webuploader实现文件的断点续传

    webuploader是百度Fex团队开发的一款上传插件,对于现代浏览器采用了HTML5的方式进行上传,二为了兼容IE浏览器则采用了Flash的方式作为补充. 首先,这个插件在全局仅暴露一个WebUp ...

  5. tp5.1 Env使用

    5.1版本取消了所有的系统常量,原来的系统路径变量改为使用Env类获取(需要引入think\facade\Env) echo "app_path=========".Env::ge ...

  6. 如何借助 OVN 来提高 OVS 在云计算环境中的性能

    众所周知,OpenvSwitch 以其丰富的功能和不错的性能,已经成为 Openstack 部署中最受欢迎的虚拟交换机.由于 Openstack Neutron 的架构引入了一些性能问题,比如 neu ...

  7. Cloud Native 环境

    当今软件行业正发生着巨变.自上世纪50年代计算机诞生以来,软件从最初的手工作坊式的交付方式,逐渐演变成为了职业化开发.团队化开发,进而定制了软件件行业的相关规范,形成了软件产业. 今天,无论是大型企业 ...

  8. 微信分享签名Java代码实现

    最近写了一个小微信签名功能,记录一下希望用到的朋友可以参考下. RestController @RequestMapping("/api/wx") public class Wei ...

  9. Vue跨路由触发事件,Vue监听sessionStorage

    近来,在做公司的聊天系统,引用的是极光的api.项目需求实时监听别人发过来的消息,进行渲染到页面,还有历史记录也要渲染,历史记录和实时聊天记录返回的结构体还不一样,看到需求的我欲哭无泪,首先登录是在首 ...

  10. hdu 4845 状压bfs(分层思想)

    拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Subm ...