Linux嵌入式内核模块程序设计
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嵌入式内核模块程序设计的更多相关文章
- 与一线Linux嵌入式开发project师的对话
转:与一线Linux嵌入式开发project师的对话 陈project师一直做Linux的嵌入式开发.作为在开发一线的project师.他对非常多问题的看法可能更切合实际需求,于是,通过邮件.就嵌入式 ...
- 专访Linux嵌入式开发韦东山操作系统图书作者--转
CSDN学院讲师韦东山:悦己之作,方能悦人 发表于2015-04-28 08:09| 6669次阅读| 来源CSDN| 24 条评论| 作者夏梦竹 专访Linux嵌入式开发韦东山操作系统图书作者 摘要 ...
- Linux嵌入式系统与硬件平台的关系
一. Linux嵌入式系统 操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口.它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合 ...
- Linux 驱动程序/内核模块/ko文件
Linux 驱动程序/内核模块/ko文件 一.内核模块加载机制 1.解析 Linux 内核可装载模块的版本检查机制 二.驱动/内核模块 编译 1.The Linux Kernel Module Pro ...
- 自己动手设计并实现一个linux嵌入式UI框架(设计)
看了"自己动手设计并实现一个linux嵌入式UI框架"显然没有尽兴,因为还没有看到庐山真面目,那我今天继续,先来说说,我用到了哪些知识背景.如:C语言基础知识,尤其是指针.函数指针 ...
- Linux嵌入式 -- 内核 (arm) & 文件系统
1. make distclean 2. 配置内核 ----> 生成 .config文件 make menuconfig ARCH=arm Makefile文件分析: 3. 编译内核 mak ...
- 嵌入式实时程序设计中C/C++代码的优化
1 引言 计算机技术和信息技术的高速发展的今天,计算机和计算机技术大量应用在人们的日常生活中,嵌入式计算机也得到了广泛的应用.嵌入式计算机是指完成一种或多种特定功能的计算机系统,是软硬件的紧密结合体. ...
- 嵌入式linux插入内核模块Error: could not insert module xxx.ko: Device or resource busy处理
设备号冲突导致 处理方法: 1.输入$cat /proc/devices 查看驱动的设备号 2.选择一个不冲突的设备号进行编译 参考文献: 1.http://blog.csdn.net/zzc_19/ ...
- Linux嵌入式文件系统(网络文件系统)
<文件系统定义> 怎么将文件和文件目录加载到linux内核中,这一种加载的方式就叫做文件系统 <建立根文件系统目录和文件> <创建目录> 1)在linux系统中使用 ...
随机推荐
- JVM的异常处理
异常处理的两大组成要素:抛出异常和捕获异常.这两大要素共同实现程序控制流的非正常转移. 抛出异常分为:显式和隐式两种. 显式抛异常的主题是应用程序,它指的是在程序中使用 “throw” 关键字.手动 ...
- c++ 交换两个容器(swap)
#include <iostream> #include <vector> using namespace std; int main () { vector<,); / ...
- python 生成zip压缩包
import zipfile file_name="a.txt" f = zipfile.ZipFile('test.zip','w',zipfile.ZIP_STORED) f. ...
- uva11149矩阵快速幂
求A+A^1+...+A^n 转换一下变成|A E|,的n+1次方就是|A^(n+1) A^n+...+A+E| |0 E| | 0 ...
- ablout unbuntu default mysql
http://www.ghostchina.com/how-to-reset-mysqls-root-password/ http://blog.csdn.net/u010603691/article ...
- PHP与Java集成开发详解(一)
很久以前,有人从www上看到看到天空上一个很亮的亮点,它就是Java语言,与此同时,在另一个地方一位梦想家也看到了一个亮点,它就是PHP. 时间一天天过去,这两个亮点也变得越来越亮,很快,它们受到了编 ...
- springboot问题集(一)------junit内Assert.assertEquals()的含义
1. assertEquals([String message],Object target,Object result) target与result不相等,中断测试方法,输出message asse ...
- 【转】powerdesigner 数据类型与数据库数据类型对应
The following numeric data types are available: Standard data type DBMS-specific physical data type ...
- MVC项目使用Oracle数据库运行提示:找不到请求的 .Net Framework Data Provider。可能没有安装
MVC项目使用Entity Framework针对Oracle数据库进行开发时,由于Oracle官方网站一般建议开发者在64位操作系统中使用32位ODP.Net进行开发.在进行程序编码的时候不会有问题 ...
- C++ 标准库和标准模板库(STL)
转自原文http://blog.csdn.net/sxhelijian/article/details/7552499 一.C++标准库 C++标准库的内容分为10类,分别是(建议在阅读中,将你已经用 ...