Linux驱动编写中的问题

如前所述,生成了ko文件之后,需要手工insmod,手工mknod,每次开机之后都要手工装载,很麻烦,于是想在程序中实现自动加载。
    由于主设备号是系统生成的,无法在应用程序中取得(或许可以取得,我没有找到方法),于是干脆在驱动中集成。
    最先想到的方法是system()调用,作为c标准库的一部分,system()在应用程序中屡试不爽,分外方便。但是写完了之后发现驱动中不能写这个语句,因为驱动是基于内核编写的,而内核库并没有实现c标准库。如printf()只能用printk()代替。
    随后想到了system()是用fork和exec函数族实现的,于是想使用execl()。按理说exec函数族属于unistd.h中定义的,于是写下了
#include <unistd.h>
但是编译报错,于是改为了#include <linux/unistd.h>
这次找到了头文件,但是无论我怎样使用excel(),始终出错,出错信息为:
implicit declaration of build-in function excel;
查了一下,原因是这个函数没有声明,或者是重复定义引发的冲突(相当于重载失败)。如果故意错误赋值,编译器会提示参数错误,这个说明原因是后者,但是我最后还是没有能排除故障。
最后使用了create_class()和Create_device()实现了功能,代替了execl()。

但是execl的问题还是没有解决,希望日后能够弄明白,毕竟很多时候,并不是每个命令行都有对应的函数。 

欢迎大家关注我的个人公众号,ID:hearwithlisten(倾诉沧桑)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值