手把手教你在 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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
測試
+關注
關注
9文章
6202瀏覽量
131352 -
驅動
+關注
關注
12文章
1955瀏覽量
88523 -
Linux
+關注
關注
88文章
11760瀏覽量
219016 -
程序
+關注
關注
117文章
3846瀏覽量
85238 -
系統
+關注
關注
1文章
1046瀏覽量
22309
發布評論請先 登錄
相關推薦
熱點推薦
如何在LoRaWAN網關的內置NS創建應用與節點設備
本文章將說明如何在LoRaWAN網關的內置NS創建應用與節點設備,配置安信可Ra-08模塊連接至網關NS服務,實現數據發送與接收。注: 該教程僅適用于支持Class B模式通訊的網關。
如何在沒有udev的情況下啟動之前創建靜態/dev/節點?
/ 節點,所有 /dev/ 節點必須在 rootfs 啟動之前創建“
[color=\\\"#FF0000\\\"]我想知道如何在沒有 udev 的情況下啟動之前
發表于 05-05 10:27
如何在Linux上創建tarball
tarball 通常用于備份個人或系統文件來創建存檔,特別是在進行可能需要撤消的更改之前。例如,Linux 系統管理員通常會在更改應用之前創建包含一系列配置文件的 tarball,以防必須撤消這些更改。從 tarball
如何在PADS中創建差分對
使用 PADS 集成的項目,快速、簡便、自動創建差分對。觀看 PADS 如何在不到 30 秒的時間內創建 50 個差分對!
如何在 Vitis 中使用 UIO 驅動框架創建簡單的 Linux 用戶應用
Linux嵌入式設計中最基本的任務之一是創建用戶應用程序。 在本篇博文中,我們將探討如何在 Vitis 中使用 UIO 驅動框架創建簡單的 Linu
如何在Petalinux創建Linux內核模塊?
--enable”,能創建Linux內核模塊,包括c源代碼文件,Makefile,Yocto的bb文件。相關文件放在目錄“ project-spec / meta-user / recipes-modules”中
如何在Linux系統下自動創建設備節點
Linux驅動實驗中,通過使用insmod命令加載模塊后,需要通過mknod命令手動創建設備節點,這樣使用起來比較麻煩,并且不可能每個設備都這樣操作,
如何在Linux中查找斷開的符號鏈接
在之前的文章中,我們解釋了什么是 Linux 中的符號鏈接。符號鏈接(Symbolic links 或 symlinks)或軟鏈接(soft links)用于在 Linux
Linux中如何如何為現有用戶創建主目錄?
在Linux系統中,每個用戶都有一個主目錄,通常稱為home目錄,用于存儲用戶的個人文件和配置信息。然而,有時候我們會創建一個新的用戶,但是忘記或者沒有選擇為其創建一個主目錄。在這種情
linux中創建group的命令
在Linux中,創建用戶組的命令是 groupadd 。 以下是一個例子: groupadd groupName 這個命令將創建一個新的用戶組,名稱為groupName。 在
如何在Linux中創建節點
評論