一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

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

我們測(cè)試驅(qū)動(dòng)加載是否正常工作,一般都會(huì)寫(xiě)應(yīng)用程序去測(cè)試,這樣驅(qū)動(dòng)程序中需要實(shí)現(xiàn) open、read 函數(shù)和 write 函數(shù),然后寫(xiě)一個(gè)應(yīng)用程序通過(guò) open 打開(kāi)節(jié)點(diǎn),獲取 fb 文件描述符,進(jìn)而對(duì)文件進(jìn)行讀寫(xiě)操作。

這里我介紹另外一種方法,我們可以在驅(qū)動(dòng)中實(shí)現(xiàn) show_xxx 和 set_xxx 函數(shù),使這個(gè)節(jié)點(diǎn)可以進(jìn)行 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命令時(shí),將會(huì)調(diào)用該函數(shù)
static ssize_t show_my_device(struct device *dev,
                              struct device_attribute *attr, char *buf)        
{
    return sprintf(buf, "%sn", mybuf);
}
 
//echo命令時(shí),將會(huì)調(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;
}
//定義一個(gè)名字為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)建一個(gè)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 放在一個(gè)文件夾中,進(jìn)行編譯,編譯之前記得準(zhǔn)備好你的 Linux 內(nèi)核源碼,因?yàn)榫幾g需要引用頭文件,所以我們?cè)?Makefile 中寫(xiě)明 Linux 內(nèi)核源碼目錄(源碼必須是編譯過(guò)的源碼,編譯 Linux 大概需要半個(gè)多小時(shí))。另外需要注意,你編譯驅(qū)動(dòng)所引用的內(nèi)核和你板子中真正運(yùn)行的 Linux 內(nèi)核要需要是同一個(gè)版本,否則掛載不上去。

編譯過(guò)程:

圖片

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

加載驅(qū)動(dòng)后cat:

圖片

echo

圖片

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

    關(guān)注

    8

    文章

    5569

    瀏覽量

    128070
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1878

    瀏覽量

    86355
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11420

    瀏覽量

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

    關(guān)注

    117

    文章

    3817

    瀏覽量

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

    關(guān)注

    1

    文章

    1025

    瀏覽量

    21659
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    何在Linux創(chuàng)建tarball

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

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

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

    何在 Vitis 中使用 UIO 驅(qū)動(dòng)框架創(chuàng)建簡(jiǎn)單的 Linux 用戶(hù)應(yīng)用

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

    何在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 ?4614次閱讀

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

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

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

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

    何在Linux查找斷開(kāi)的符號(hào)鏈接

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

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

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