Linux驅動學習(3 裝置節點 手動建立)

2021-07-12 05:53:23 字數 2454 閱讀 7915

模組**chr_test.c

/**

* to test the chr_dev for ap operation

* by wozon

* * */

#include

#include

#include

#include

#include

module_license ("gpl");

dev_t dev;

struct cdev cdev;

int chr_open(struct inode *i, struct file *f)

int chr_close(struct inode *i, struct file *filp)

struct file_operations chr_fops=;

//模組載入函式

int __init init_module (void)

cdev_init(&cdev,&chr_fops);//字元裝置驅動控制塊初始化

rst = cdev_add(&cdev,dev,1);//向核心新增字元裝置驅動控制塊

if(rst != 0)

printk("chr,this module was added by the kernel!\n");

goto exit0;

exit1:

unregister_chrdev_region(dev,1);//登出裝置號

exit0:

return rst;

}//模組解除安裝函式

void __exit cleanup_module (void)

應用程式**test.c

/*

* test.c

*/#include

#include

#include

#include

#include

#include

#include

int main (void)

printf ("/dev/chrdev opened, fd=%d\n",fd);

close (fd);

printf ("/dev/chrdev closed!\n");

return

0;}

makefile

#to display info during ccompiling

$(warning kernelrelease=$(

kernelrelease))

#to check the kernelrelease enviroment value

ifeq ($(

kernelrelease),)

#it's null, so to set the enviroment value

kerneldir ?= /lib/modules

/$(shell uname -r)/build

pwd:=$(shell pwd)

modules:

$(make) -c

$(kerneldir) m=$(

pwd) modules

modules_install:

$(make) -c

$(kerneldir) m=$(

pwd) modules_install

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions module* modules*

.phony

: modules modules_install clean

#to create obj file

else

obj-m := chr_test.o

endif

先編譯模組檔案,在終端裡面輸入make,按下回車

生成chr_test.ko檔案。

進入root使用者,手動建立裝置節點:mknod /dev/ c 249 1

可以看出在/dev/目錄下面生成了sb13裝置

將chr_test.ko檔案載入進核心裡面 insmod chr_test.ko

編譯test.c檔案,生成應用程式

執行應用程式 sudo ./a.out

可以看出,正常訪問到了我們剛剛建立的裝置節點。

Linux裝置驅動 新增裝置節點

1 環境描述 host ubuntu14.04 64bit target smdk2410 kernel linux 2.6.39.4 2 前言 我們在剛開始寫linux裝置驅動程式的時候,很多時候都是利用mknod命令手動建立裝置節點,實際上linux核心為我們提供了一組函式,可以用來在模組載入的...

linux驅動開發(3 自動建立裝置節點)

驅動中的修改 在之前的內容中,執行應用程式之前,都要手動使用mknod命令來建立裝置節點,這種方法非常的不方便,實際上現在的核心已經提供了一些介面,加上乙個使用者空間程式就可以實現自動刪除與自動建立。引用維基百科的一段描述 udev 是linux kernel 2.6系列的裝置管理器。它主要的功能是...

linux裝置驅動學習

華清遠見嵌入式培訓中心 講師。通常,核心的公升級對從事linux應用程式開發的人員來說影響較小,因為系統呼叫基本保持相容,影響比較大的是驅動開發人員。每次核心的更新都可能導致許多核心函式原型上的變化,其中既有核心本身提供的函式,也有硬體平台 提供的函式,後者變化的更加頻繁。這一點從許多經典書籍就可驗...