模組**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應用程式開發的人員來說影響較小,因為系統呼叫基本保持相容,影響比較大的是驅動開發人員。每次核心的更新都可能導致許多核心函式原型上的變化,其中既有核心本身提供的函式,也有硬體平台 提供的函式,後者變化的更加頻繁。這一點從許多經典書籍就可驗...