【嵌入式Linux学习】Hello World 内核模块
2023-09-11 14:20:36 时间
一、新建文件夹hello,创建hello.c和Makefile文件
hello.c
#include<linux/module.h>
#include<linux/kernel.h>
static int hello_init(void)
{
printk(KERN_ALERT "Hello World\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye World\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
Makefile
obj-m:=hello.o
CURRENT_PATH:=$(shell pwd)
VERSION_NUM:=$(shell uname -r)
LINUX_PATH:=/lib/modules/$(VERSION_NUM)/build
CONFIG_MODULE_SIG=n
all:
make -C $(LINUX_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_PATH) M=$(CURRENT_PATH) clean
二、在终端进入该文件夹
1、编译
make
2、加载驱动模块
sudo insmod hello.ko
查询模块是否被加载
lsmod | grep hello
查看模块被加载的打印信息
dmesg
3、卸载驱动模块
sudo rmmod hello
查看驱动模块是否被卸载
lsmod | grep hello
查看驱动模块被卸载打印信息
在实验过程中尝试了只有加载模块,没有卸载模块函数,这时候出现了不能正常卸载模块的现象。解决办法两种:1、参照这篇<博文> 2、重启电脑
相关文章
- 20个Linux命令技巧
- 用navicat访问linux数据库,成功实现Navicat访问Linux中安装的MySQL数据库
- 《嵌入式Linux开发实用教程》——1.3 arm-linux交叉编译链
- Linux数据对齐
- 《Linux嵌入式实时应用开发实战(原书第3版)》—2.2 硬件需求
- lrzsz 移植到 ARM-linux 嵌入式板子上
- linux用户,组管理总结(8/19)
- Linux编译安装RTL8192CU芯片驱动,使用TP_LINK wn823n无线网卡
- 【嵌入式Linux驱动入门】一、基于QEMU的IMX6ULL虚拟开发环境搭建
- 【嵌入式Linux学习】shell脚本入门
- 【嵌入式Linux学习】9、挂载U盘到Ubuntu中
- 【嵌入式Linux学习】6、交叉编译环境的搭建,单文件编译Hello Linux!
- 【正点原子FPGA连载】第二十章Linux图形化配置及其原理 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南
- 【正点原子Linux连载】第三章 初识Qt摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2
- 【正点原子MP157连载】 第十一章 触摸按键控制LED灯实验【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- 【正点原子Linux连载】第一章 应用编程概念-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1
- 【正点原子Linux连载】第十八章 Camera 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2
- 【正点原子MP157连载】第三十章 Linux 内核定时器实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- 【正点原子MP157连载】第二十八章 Linux并发与竞争实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- 【正点原子Linux连载】第六十四章 Linux 多点电容触摸屏实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- 【正点原子Linux连载】第三十七章 Linux内核移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
- 【正点原子Linux连载】第二十三章 音频应用编程-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1
- 【正点原子Linux连载】第十二章 线程同步-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1
- Linux内核project导论——linux学习和职业曲线(刚開始学习的人,中级,高级都可參考)
- Linux学习笔记(25)linux批量管理