ubuntu下的driver编译环境构建以及第一个字符驱动:helloworld
ubuntu下是可以进行一些驱动开发和调试的,编译driver所依赖的kernel header其实Ubuntu也是有提供的。
一、安装kernel header:
1.1获取Ubuntu的内核版本号:
1 | uname -r |
我这里的运行结果:
5.4.0-42-generic
1.2 安装
那么,直接安装对应的kernel header就可以执行如下命令:
1 | sudo apt install linux-headers-` uname -r` |
安装成功后,可以分别在/usr/src和/lib/modules/下找到对应内核版本号的目录:
如我这里就是:
/lib/modules/5.4.0-42-generic
/usr/src/5.4.0-42-generic
二、makefile
makefile是很重要的一个环节,配置如下:
1 2 3 4 5 6 7 8 9 | obj-m += char_hello.o CURRENT_PATH:=$(shell pwd ) LINUX_KERNEL_PATH:= /lib/modules/ $(shell uname -r) /build all: $(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules clean: $(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean |
三、字符驱动:hello world
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <linux/init.h> #include <linux/module.h> int hello_init( void ) { printk( "Hello, world\n" ); return 0; } void hello_exit( void ) { printk( "Goodbye, Hello world\n" ); } module_init(hello_init); module_exit(hello_exit);<br>MODULE_LICENSE( "GPL" );<br>MODULE_AUTHOR( "bigcatio" );<br>MODULE_DESCRIPTION( "A good start" );<br>MODULE_VERSION( "0.0.1" ); |
执行make命令后,即可在目录下产生char_hello.ko,再执行sudo insmod char_hello.ko即可加载好第一个字符驱动。
1 | sudo insmod char_hello.ko |
此时,在终端里并不会看到hello world的信息。需要再执行如下命令:
1 | sudo dmesg -c |
结果如下:
1 2 | [ 1326.583627] Hello, world [ 1326.583673] Hello, world |
此外还可以执行命令modinfo char_hello.ko来查看ko中的相关信息。
1 | modinfo char_hello.ko |
结果如下:
1 2 3 4 5 6 7 8 9 10 | filename: /home/bcc/coding_bigcatio/driver_build_under_ubuntu/ . /char_hello .ko version: 0.0.1 description: A good start author: bigcatio license: GPL srcversion: 8636B623A76BDC7801FFE25 depends: retpoline: Y name: char_hello vermagic: 5.4.0-53-generic SMP mod_unload |
【推荐】FlashTable:表单开发界的极速跑车,让你的开发效率一路狂飙
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C#.Net筑基-泛型T & 协变逆变
· dotnet 代码调试方法
· DbContext是如何识别出实体集合的
· 一次 .NET 性能优化之旅:将 GC 压力降低 99%
· MySQL索引完全指南:让你的查询速度飞起来
· 我救了一个网站,性能提升了1500 多倍!
· .NET程序员的多语言笔记本:Polyglot Notebook
· 免费开源 .NET OpenCV 迷你运行时全平台发布
· 经验贴!万字总结网卡丢包及ping延迟等网络问题排查思路
· 用好索引的10条军规