第一个driver~~~
网上已经看到过n遍的linux2.6驱动hello world程序,终于忍不住要自己实现一遍了。
在做之前就看了半天,据说是2.6的内核比用用make来编译,暂不知道为什么,先跟着做,然后动手改。
看到别人发的hello.c和Makefile
#include <linux/init.h>
#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, hello\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := hello.o
obj-m := hello.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
执行make。。。出现了错误提示:
/lib/modules/2.6.18-1.2798.fc6xen/build 文件或文件夹不存在
然后执行:
ls -l /lib/modules/2.6.18-1.2798.fc6xen/build
看到:
lrwxrwxrwx 1 root root 40 06-22 10:34 build -> /usr/src/kernels/2.6.18-1.2798.fc6-i686/
不知道为什么,build到行尾一直都在闪,但是看到它只是一个软链接,看样子是什么原因链接失效了,所以,把原来的链接删了重新建了一个链接:
cd /lib/modules/2.6.18-1.2798.fc6xen/
rm build
ln -s /usr/src/kernels/2.6.18-1.2798.fc6xen ./build
然后再切换回去make。。。make ok!
但是执行insmod hello.ko时又出现了问题:
[root@global Character]# insmod hello.ko
insmod: error inserting 'hello.ko': -1 Invalid module format
通过uname -a,cat /proc/version, gcc -v...之后发现gcc,内核版本都没有问题,可奇怪死了。。。google中,呵呵~~~
找了半天,貌似是与内核版本不一致造成的。也下不到2.6.18-1.2798.fc6xen的dev-tools,所以,我又把它拿到了fdaro8下面进行编译,一切ok~~~
换内核是个挺麻烦的事,会牵扯到很多东西。现在是学驱动,所以,其它的先放置,选困扰最好的方式来学习,目标才最明确。
无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!