0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Linux中創(chuàng)建節(jié)點

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:Jasonangel ? 2023-10-07 15:25 ? 次閱讀

手把手教你在 Linux 中創(chuàng)建節(jié)點,使其可以進行 cat 和 echo 。

我們測試驅(qū)動加載是否正常工作,一般都會寫應用程序去測試,這樣驅(qū)動程序中需要實現(xiàn) open、read 函數(shù)和 write 函數(shù),然后寫一個應用程序通過 open 打開節(jié)點,獲取 fb 文件描述符,進而對文件進行讀寫操作。

這里我介紹另外一種方法,我們可以在驅(qū)動中實現(xiàn) show_xxx 和 set_xxx 函數(shù),使這個節(jié)點可以進行 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命令時,將會調(diào)用該函數(shù)
static ssize_t show_my_device(struct device *dev,
                              struct device_attribute *attr, char *buf)        
{
    return sprintf(buf, "%sn", mybuf);
}
 
//echo命令時,將會調(diào)用該函數(shù)
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的設(shè)備屬性文件
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");
    //創(chuàng)建mytest_device設(shè)備
    mydev = device_create(cls, 0, MKDEV(major,0),NULL,"mytest_device");    
    
    //在mytest_device設(shè)備目錄下創(chuàng)建一個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 內(nèi)核源碼,因為編譯需要引用頭文件,所以我們在 Makefile 中寫明 Linux 內(nèi)核源碼目錄(源碼必須是編譯過的源碼,編譯 Linux 大概需要半個多小時)。另外需要注意,你編譯驅(qū)動所引用的內(nèi)核和你板子中真正運行的 Linux 內(nèi)核要需要是同一個版本,否則掛載不上去。

編譯過程:

圖片

然后把 test.ko 傳輸過去,不管是使用 scp 命令還是使用 ftp 協(xié)議都可以。

加載驅(qū)動后cat:

圖片

echo

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 測試
    +關(guān)注

    關(guān)注

    8

    文章

    5103

    瀏覽量

    126340
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1820

    瀏覽量

    85110
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11210

    瀏覽量

    208721
  • 程序
    +關(guān)注

    關(guān)注

    116

    文章

    3761

    瀏覽量

    80754
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1006

    瀏覽量

    21293
收藏 人收藏

    評論

    相關(guān)推薦

    Linux驅(qū)動創(chuàng)建procfs接口的方法

    上篇介紹了Linux驅(qū)動sysfs接口的創(chuàng)建,今天介紹procfs接口的創(chuàng)建。
    發(fā)表于 05-31 16:48 ?708次閱讀
    <b class='flag-5'>Linux</b>驅(qū)動<b class='flag-5'>中</b><b class='flag-5'>創(chuàng)建</b>procfs接口的方法

    何在LoRaWAN網(wǎng)關(guān)的內(nèi)置NS創(chuàng)建應用與節(jié)點設(shè)備

    本文章將說明如何在LoRaWAN網(wǎng)關(guān)的內(nèi)置NS創(chuàng)建應用與節(jié)點設(shè)備,配置安信可Ra-08模塊連接至網(wǎng)關(guān)NS服務(wù),實現(xiàn)數(shù)據(jù)發(fā)送與接收。注: 該教程僅適用于支持Class B模式通訊的網(wǎng)關(guān)。
    的頭像 發(fā)表于 12-16 16:18 ?1652次閱讀
    如<b class='flag-5'>何在</b>LoRaWAN網(wǎng)關(guān)的內(nèi)置NS<b class='flag-5'>創(chuàng)建</b>應用與<b class='flag-5'>節(jié)點</b>設(shè)備

    何在Multisim創(chuàng)建新元器件

    何在Multisim創(chuàng)建新元器件步驟1:輸入元器件信息
    發(fā)表于 07-16 23:44

    何在單個或兩個節(jié)點環(huán)境下去創(chuàng)建索引呢

    Elasticsearch分片和副本機制是什么呢?如何在單個或兩個節(jié)點環(huán)境下去創(chuàng)建索引呢?
    發(fā)表于 01-20 07:18

    何在沒有udev的情況下啟動之前創(chuàng)建靜態(tài)/dev/節(jié)點?

    / 節(jié)點,所有 /dev/ 節(jié)點必須在 rootfs 啟動之前創(chuàng)建“ [color=\\\"#FF0000\\\"]我想知道如何在沒有 udev 的情況下啟動之前
    發(fā)表于 05-05 10:27

    AN1246文手冊之如何在Microchip圖形庫創(chuàng)建控件

    本文介紹了AN1246文手冊之如何在Microchip圖形庫創(chuàng)建控件。
    發(fā)表于 06-21 09:25 ?8次下載
    AN1246<b class='flag-5'>中</b>文手冊之如<b class='flag-5'>何在</b>Microchip圖形庫<b class='flag-5'>中</b><b class='flag-5'>創(chuàng)建</b>控件

    何在IP Integrator創(chuàng)建MicroBlaze設(shè)計

    了解如何在IP Integrator創(chuàng)建簡單的MicroBlaze設(shè)計,并創(chuàng)建一個在KC705目標板上運行的簡單軟件應用程序。
    的頭像 發(fā)表于 11-20 06:13 ?3145次閱讀
    如<b class='flag-5'>何在</b>IP Integrator<b class='flag-5'>中</b><b class='flag-5'>創(chuàng)建</b>MicroBlaze設(shè)計

    何在Linux創(chuàng)建tarball

    tarball 通常用于備份個人或系統(tǒng)文件來創(chuàng)建存檔,特別是在進行可能需要撤消的更改之前。例如,Linux 系統(tǒng)管理員通常會在更改應用之前創(chuàng)建包含一系列配置文件的 tarball,以防必須撤消這些更改。從 tarball
    的頭像 發(fā)表于 01-09 16:08 ?2826次閱讀

    何在PADS創(chuàng)建差分對

    使用 PADS 集成的項目,快速、簡便、自動創(chuàng)建差分對。觀看 PADS 如何在不到 30 秒的時間內(nèi)創(chuàng)建 50 個差分對!
    的頭像 發(fā)表于 05-21 06:10 ?5646次閱讀

    何在 Vitis 中使用 UIO 驅(qū)動框架創(chuàng)建簡單的 Linux 用戶應用

    Linux嵌入式設(shè)計中最基本的任務(wù)之一是創(chuàng)建用戶應用程序。 在本篇博文中,我們將探討如何在 Vitis 中使用 UIO 驅(qū)動框架創(chuàng)建簡單的 Linu
    的頭像 發(fā)表于 11-20 14:05 ?4241次閱讀

    何在Petalinux創(chuàng)建Linux內(nèi)核模塊?

    --enable”,能創(chuàng)建Linux內(nèi)核模塊,包括c源代碼文件,Makefile,Yocto的bb文件。相關(guān)文件放在目錄“ project-spec / meta-user / recipes-modules”
    的頭像 發(fā)表于 03-02 11:10 ?4288次閱讀

    何在linux服務(wù)器打開端口

    有時我們可能需要在Linux服務(wù)器打開端口或在Linux服務(wù)器的防火墻啟用端口來運行特定的應用程序。在本文中,小編將帶大家分析一下如何在
    的頭像 發(fā)表于 10-17 16:22 ?1.2w次閱讀

    何在Linux系統(tǒng)下自動創(chuàng)建設(shè)備節(jié)點

      Linux驅(qū)動實驗,通過使用insmod命令加載模塊后,需要通過mknod命令手動創(chuàng)建設(shè)備節(jié)點,這樣使用起來比較麻煩,并且不可能每個設(shè)備都這樣操作,
    的頭像 發(fā)表于 11-06 20:18 ?4344次閱讀

    何在Linux查找斷開的符號鏈接

    在之前的文章,我們解釋了什么是 Linux 的符號鏈接。符號鏈接(Symbolic links 或 symlinks)或軟鏈接(soft links)用于在 Linux
    的頭像 發(fā)表于 02-06 18:23 ?1601次閱讀

    Linux如何如何為現(xiàn)有用戶創(chuàng)建主目錄?

    Linux系統(tǒng),每個用戶都有一個主目錄,通常稱為home目錄,用于存儲用戶的個人文件和配置信息。然而,有時候我們會創(chuàng)建一個新的用戶,但是忘記或者沒有選擇為其創(chuàng)建一個主目錄。在這種情
    的頭像 發(fā)表于 05-12 16:24 ?2271次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b>如何如何為現(xiàn)有用戶<b class='flag-5'>創(chuàng)建</b>主目錄?