手把手教你在 Linux 中創建節點,使其可以進行 cat 和 echo 。
我們測試驅動加載是否正常工作,一般都會寫應用程序去測試,這樣驅動程序中需要實現 open、read 函數和 write 函數,然后寫一個應用程序通過 open 打開節點,獲取 fb 文件描述符,進而對文件進行讀寫操作。
這里我介紹另外一種方法,我們可以在驅動中實現 show_xxx 和 set_xxx 函數,使這個節點可以進行 cat 和 echo 操作,源碼如下:
test.c
#include < linux/module.h >
#include < linux/init.h >
#include < linux/platform_device.h >
#include < linux/gpio.h >
#include < linux/delay.h >
#include < linux/regulator/consumer.h >
#include < sound/soc.h >
#include < sound/jack.h >
static char mybuf[100]="123";
//cat命令時,將會調用該函數
static ssize_t show_my_device(struct device *dev,
struct device_attribute *attr, char *buf)
{
return sprintf(buf, "%sn", mybuf);
}
//echo命令時,將會調用該函數
static ssize_t set_my_device(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
sprintf(mybuf, "%s", buf);
return len;
}
//定義一個名字為my_device_test的設備屬性文件
static DEVICE_ATTR(my_device_test, S_IWUSR|S_IRUSR, show_my_device, set_my_device);
struct file_operations mytest_ops={
.owner = THIS_MODULE,
};
static int major;
static struct class *cls;
static int mytest_init(void)
{
struct device *mydev;
major=register_chrdev(0,"mytest", &mytest_ops);
cls=class_create(THIS_MODULE, "mytest_class");
//創建mytest_device設備
mydev = device_create(cls, 0, MKDEV(major,0),NULL,"mytest_device");
//在mytest_device設備目錄下創建一個my_device_test屬性文件
if(sysfs_create_file(&(mydev- >kobj), &dev_attr_my_device_test.attr)) {
return -1;
}
return 0;
}
static void mytest_exit(void)
{
device_destroy(cls, MKDEV(major,0));
class_destroy(cls);
unregister_chrdev(major, "mytest");
}
module_init(mytest_init);
module_exit(mytest_exit);
MODULE_LICENSE("GPL");
Makefile
KERNELDIR := /home/book/linux/tool/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
CURRENT_PATH := $(shell pwd)
obj-m := test.o
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
在 Linux 中新建文件夾,將 test.c 和 Makefile 放在一個文件夾中,進行編譯,編譯之前記得準備好你的 Linux 內核源碼,因為編譯需要引用頭文件,所以我們在 Makefile 中寫明 Linux 內核源碼目錄(源碼必須是編譯過的源碼,編譯 Linux 大概需要半個多小時)。另外需要注意,你編譯驅動所引用的內核和你板子中真正運行的 Linux 內核要需要是同一個版本,否則掛載不上去。
編譯過程:
然后把 test.ko 傳輸過去,不管是使用 scp 命令還是使用 ftp 協議都可以。
加載驅動后cat:
echo
-
測試
+關注
關注
8文章
5469瀏覽量
127436 -
驅動
+關注
關注
12文章
1866瀏覽量
85934 -
Linux
+關注
關注
87文章
11373瀏覽量
211293 -
程序
+關注
關注
117文章
3806瀏覽量
81708 -
系統
+關注
關注
1文章
1023瀏覽量
21510
發布評論請先 登錄
相關推薦
如何在LoRaWAN網關的內置NS創建應用與節點設備

如何在沒有udev的情況下啟動之前創建靜態/dev/節點?
如何在Linux上創建tarball
如何在PADS中創建差分對
如何在 Vitis 中使用 UIO 驅動框架創建簡單的 Linux 用戶應用
如何在Petalinux創建Linux內核模塊?
如何在linux服務器中打開端口
如何在Linux系統下自動創建設備節點
如何在Linux中查找斷開的符號鏈接
Linux中如何如何為現有用戶創建主目錄?

評論