小编Mir*_*Mir的帖子

如何在为设备驱动程序加载内核模块时自动在/ dev中创建设备?

我正在尝试开发Linux设备驱动程序,并且作为我的第一次尝试,我正在尝试开发具有以下文件选项的char设备驱动程序,

struct file_operations fops{  
.open=open_fun,  
.release=release_fun,  
.write=write_fun,  
.read=read_fun,  
};  
Run Code Online (Sandbox Code Playgroud)

当我使用加载驱动程序时insmod,我看到/proc/devices列出了char设备下的驱动程序,但我找不到它/dev.谷歌搜索建议使用mknod创建一个deivce /dev并将其与驱动程序的主要和次要关联.但是,尝试这样做会导致"权限被拒绝"错误,即使以超级用户身份完成也是如此.

/dev加载内核模块时,我该怎么做才能使设备出现?我尝试了注册设备的旧(register_chrdev)和更新版本(cdev_init & cdev_add),但没有一个工作.

谢谢,
米尔

linux-device-driver linux-kernel

12
推荐指数
2
解决办法
3万
查看次数

linux驱动程序中的struct文件

我目前正在学习如何编写Linux设备驱动程序,我无法理解" struct file ".我正在使用Linux设备驱动程序第3版这本书来帮助我.

这就是我的理解.

一个.struct file表示一个打开的文件,因此,当在设备驱动程序模块中调用open时,内核将创建一个包含与设备驱动程序相关的所有内容的struct文件.

湾 如果要传递设备驱动程序的这个实例,那么必须在open()之后将指针传递给内核创建 的特定struct文件

C.file-> private_data将始终返回指向设备的指针.

与此相关的另一个问题是字段" f_pos ".该书说如果想知道文件中的当前位置,驱动程序可以读取该值.这是我从中理解的.

d.如果struct foo_dev以及此驱动程序用于存储数据的内存总量为X,则f_pos指向驱动程序保留的该内存块中的当前位置.

我理解的是多少是对的,请在我错的地方纠正我.

谢谢,
米尔

c linux kernel driver linux-device-driver

11
推荐指数
1
解决办法
2万
查看次数

从内核空间访问GPIO

在尝试编写一个简单的char设备驱动程序之后,我现在希望编写一个char设备驱动程序来访问嵌入式Linux板上的GPIO引脚,例如Beagleboard.我感兴趣的是编写一个模块"mygpiomodule",当加载时必须出现/dev/mygpiomodule这样的模块,即从用户空间读取,写入访问GPIO.我不希望从用户空间访问GPIO.我想这是我第一次尝试编写一个可以与某些外设接口的模块.我想将一些LED插入端口并尝试打开或关闭它们.

我应该怎么做呢?

由于
米尔

linux-device-driver linux-kernel

3
推荐指数
1
解决办法
1万
查看次数

在这种情况下,是否有更快的替代if-else?

while(some_condition){  
    if(FIRST)  
    {   
        do_this;  
    }  
    else  
    {  
        do_that;  
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的程序中,if(FIRST)成功的可能性大约是10000中的1.在C/C++中可以有任何替代方法,这样我们就可以避免在while循环内的每次迭代中检查条件,希望在这种情况下看到更好的性能.

好!让我详细介绍一下.我正在为信号采集和跟踪方案编写代码,其中我的系统状态将更频繁地保持在跟踪模式的ACQUISITION模式.

while(signal_present)  
{    
    if(ACQUISITION_SUCCEEDED)  
    {     
        do_tracking();  // this functions can change the state from TRACKING to ACQUISITION  
    }    
    else  
    {    
        do_acquisition();  // this function can change the state from ACQUISITION to TRACKING  
    }     
}    
Run Code Online (Sandbox Code Playgroud)

所以这里发生的是系统通常保持跟踪模式,但是当跟踪失败时它可以进入采集模式但不常见.(假设输入数据的数量是无限的.)

c c++ performance

2
推荐指数
2
解决办法
2866
查看次数