精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HDF驅動框架探路:對比Linux原生驅動開發在Imx6ull板子點燈

系統
本文章對比linux應用在imx6ull中點亮LED燈。所以先修煉修煉內功。本文的框架圖是最近這段時間結合了對3516測試HDF框架,以及imx6ull上linux驅動程序的學習,所得出的。

[[440622]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

老規矩還是將最終希望跑出來的效果放出來。如下:

HDF驅動框架探路(五):對比linux原生驅動開發在imx6ull板子點燈-鴻蒙HarmonyOS技術社區

HDF驅動框架探路5:

前言

想要深入了解HDF框架的話,應該繞不開linux驅動程序的掌握。由于是在看了韋東山老師對openharmony做的移植后,覺得linux驅動的內功還是必須要有的,所以本文章對比linux應用在imx6ull中點亮LED燈。所以先修煉修煉內功。

本文框架圖

HDF驅動框架探路(五):對比linux原生驅動開發在imx6ull板子點燈-鴻蒙HarmonyOS技術社區

本文的框架圖是最近這段時間結合了對3516測試HDF框架,以及imx6ull上linux驅動程序的學習,所得出的,是基于目前社區中所用的比較多的幾款板子和openharmony、linux對比所做的圖,大佬們覺得這個圖有任何問題,歡迎批評指出。

1.驅動程序

1.1 最簡單的驅動程序邏輯

HDF驅動框架探路(五):對比linux原生驅動開發在imx6ull板子點燈-鴻蒙HarmonyOS技術社區
  •  如上圖所示,首先有個驅動程序入口函數和出口函數分別是module_init(led_init),module_exit(led_exit);
  •  然后分別實現led_open和led_write這兩個業務函數去填充file_operations結構體。
  •  最后把file_operations結構體放入register_chrdev函數進行注冊,然后放入入口函數中。
  •  因為驅動程序的字符設備需要綁定IO設備去使用,所以在入口函數中調用class_create和device_create。

1.2 完成的實現代碼如下:

  1. #include <linux/kernel.h> 
  2. #include <linux/module.h> 
  3. #include <linux/slab.h> 
  4. #include <linux/init.h> 
  5. #include <linux/fs.h> 
  6. #include <linux/delay.h> 
  7. #include <linux/poll.h> 
  8. #include <linux/mutex.h> 
  9. #include <linux/wait.h> 
  10. #include <linux/uaccess.h> 
  11. #include <linux/device.h> 
  12. #include <asm/io.h> 
  13.  
  14. static int major; 
  15. static struct class *led_class; 
  16.  
  17. /* registers */ 
  18. // IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 地址:0x02290000 + 0x14 
  19. static volatile unsigned int *IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3; 
  20.  
  21. // GPIO5_GDIR 地址:0x020AC004 
  22. static volatile unsigned int *GPIO5_GDIR; 
  23.  
  24. //GPIO5_DR 地址:0x020AC000 
  25. static volatile unsigned int *GPIO5_DR; 
  26.  
  27. static ssize_t led_write(struct file *filp, const char __user *buf, 
  28.              size_t count, loff_t *ppos) 
  29.     char val; 
  30.     int ret; 
  31.      
  32.     /* copy_from_user : get data from app */ 
  33.     ret = copy_from_user(&val, buf, 1); 
  34.  
  35.     /* to set gpio register: out 1/0 */ 
  36.     if (val) 
  37.     { 
  38.         /* set gpio to let led on */ 
  39.         *GPIO5_DR &= ~(1<<3); 
  40.     } 
  41.     else 
  42.     { 
  43.         /* set gpio to let led off */ 
  44.         *GPIO5_DR |= (1<<3); 
  45.     } 
  46.     return 1; 
  47.  
  48. static int led_open(struct inode *inode, struct file *filp) 
  49.     /* enable gpio5 
  50.      * configure gpio5_io3 as gpio 
  51.      * configure gpio5_io3 as output  
  52.      */ 
  53.     *IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 &= ~0xf; 
  54.     *IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 |= 0x5; 
  55.  
  56.     *GPIO5_GDIR |= (1<<3); 
  57.      
  58.     return 0; 
  59.  
  60. static struct file_operations led_fops = { 
  61.     .owner      = THIS_MODULE, 
  62.     .write      = led_write, 
  63.     .open       = led_open, 
  64. }; 
  65.  
  66. /* 入口函數 */ 
  67. static int __init led_init(void) 
  68.     printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__); 
  69.      
  70.     major = register_chrdev(0, "hello_led", &led_fops); 
  71.  
  72.     /* ioremap */ 
  73.     // IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 地址:0x02290000 + 0x14 
  74.     IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = ioremap(0x02290000 + 0x14, 4); 
  75.      
  76.     // GPIO5_GDIR 地址:0x020AC004 
  77.     GPIO5_GDIR = ioremap(0x020AC004, 4); 
  78.      
  79.     //GPIO5_DR 地址:0x020AC000 
  80.     GPIO5_DR  = ioremap(0x020AC000, 4); 
  81.  
  82.     led_class = class_create(THIS_MODULE, "helloled"); 
  83.     device_create(led_class, NULL, MKDEV(major, 0), NULL"helloled"); /* /dev/myled */ 
  84.      
  85.     return 0; 
  86.  
  87. static void __exit led_exit(void) 
  88.     iounmap(IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3); 
  89.     iounmap(GPIO5_GDIR); 
  90.     iounmap(GPIO5_DR); 
  91.      
  92.     device_destroy(led_class, MKDEV(major, 0)); 
  93.     class_destroy(led_class); 
  94.      
  95.     unregister_chrdev(major, "hello_led"); 
  96.  
  97. module_init(led_init); 
  98. module_exit(led_exit); 
  99. MODULE_LICENSE("GPL"); 

2.驅動程序測試部分

2.1 測試模塊實現思路

在linux內核中注冊相應的驅動模塊后,通過glibc庫函數提供的open,read,write接口訪問驅動程序綁定驅動字符設備的IO文件就可以直接調用到對應的驅動程序了。

2.2 測試部分完成實現代碼

  1. #include <sys/types.h> 
  2. #include <sys/stat.h> 
  3. #include <fcntl.h> 
  4. #include <string.h> 
  5. #include <unistd.h> 
  6. #include <stdio.h> 
  7.  
  8.  
  9. // ledtest /dev/helloled on 
  10. // ledtest /dev/helloled off 
  11.  
  12. int main(int argc, char **argv) 
  13.     int fd; 
  14.     char status = 0; 
  15.      
  16.     if (argc != 3) 
  17.     { 
  18.         printf("Usage: %s <dev> <on|off>\n", argv[0]); 
  19.         printf("  eg: %s /dev/helloled on\n", argv[0]); 
  20.         printf("  eg: %s /dev/helloled off\n", argv[0]); 
  21.         return -1; 
  22.     } 
  23.     // open 
  24.     fd = open(argv[1], O_RDWR); 
  25.     if (fd < 0) 
  26.     { 
  27.         printf("can not open %s\n", argv[0]); 
  28.         return -1; 
  29.     } 
  30.  
  31.     // write 
  32.     if (strcmp(argv[2], "on") == 0) 
  33.     { 
  34.         status = 1; 
  35.     } 
  36.  
  37.     write(fd, &status, 1); 
  38.     return 0;    

3.編譯

3.1 編譯思路:

  • 首先需要將驅動程序編譯成ko文件。
  • 將測試程序編譯成可執行文件。

3.2 完成實現代碼如下:

  1. KERN_DIR = /home/qzk/code/imx6ullPro/Linux-4.9.88 
  2.  
  3. all
  4.     make -C $(KERN_DIR) M=`pwd` modules  
  5.     $(CROSS_COMPILE)gcc -o ledtest ledtest.c  
  6.  
  7. clean: 
  8.     make -C $(KERN_DIR) M=`pwd` modules clean 
  9.     rm -rf modules.order 
  10.     rm -f ledtest 
  11.  
  12. obj-m   += led_drv.o 

上述代碼需要的注意的,大家在使用時候需要換掉KERN_DIR中的值,換成大家自己的內核目錄,因為編譯時候會去這個目錄下找頭文件。

4.安裝驅動進行測試

4.1 安裝驅動思路

通過上述的步驟,大家會發現驅動程序編譯好了放在了ubuntu系統中,我們的目標是需要將驅動程序安裝進入imx6ull中,所以我們的目標是將驅動程序放入imx6ull中。這里的方案是:將網線插入電腦,然后串口連接imx6ull,先各自寫死ip地址,目標是二者能夠ping通,然后搭建nfs,這樣就達到了imx6ull訪問ubuntu下的驅動程序的目的

4.2 搭建好環境后進行安裝驅動

通過insmod命令進行安裝。

HDF驅動框架探路(五):對比linux原生驅動開發在imx6ull板子點燈-鴻蒙HarmonyOS技術社區

4.3 執行測試文件去點亮,熄滅燈

如下圖:執行命令

HDF驅動框架探路(五):對比linux原生驅動開發在imx6ull板子點燈-鴻蒙HarmonyOS技術社區

沒什么意外的話,這盞燈就在你的掌控之中了

文章相關附件可以點擊下面的原文鏈接前往下載

https://harmonyos.51cto.com/resource/1583

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-12-23 10:02:58

鴻蒙HarmonyOS應用

2021-11-22 16:46:59

鴻蒙HarmonyOS應用

2021-11-30 14:52:41

鴻蒙HarmonyOS應用

2023-03-16 15:18:16

2022-08-08 19:35:37

HDF驅動開發鴻蒙

2021-11-26 15:34:27

鴻蒙HarmonyOS應用

2021-09-07 15:48:28

鴻蒙HarmonyOS應用

2021-05-24 14:28:34

鴻蒙HarmonyOS應用

2021-12-15 10:02:25

鴻蒙HarmonyOS應用

2022-04-20 20:28:40

HDF 驅動框架鴻蒙操作系統

2020-10-16 09:47:34

鴻蒙Liteos-a移植

2009-08-04 10:46:04

2017-02-10 15:32:47

2023-03-20 16:05:49

HDF傳感器驅動開發

2023-03-20 16:21:26

ADC數字轉換器

2023-03-21 18:06:49

ADC數字轉換器

2021-01-21 13:27:37

鴻蒙HarmonyOS應用開發

2021-03-11 12:23:13

Linux驅動開發

2023-09-14 15:49:42

PWM鴻蒙

2021-09-10 15:12:04

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

国内精品免费视频| 波多野结衣与黑人| 国产一级片一区二区| 天天做天天爱天天综合网| 精品久久久久久综合日本欧美| 久久久久久久久久久视频| 尤物在线视频| 99久久伊人久久99| 国产一区欧美二区三区| 久久久久久久久久免费视频| 久久在线电影| 日韩精品视频免费| 中文字幕乱妇无码av在线| 松下纱荣子在线观看| 亚洲日本va午夜在线影院| 鲁丝一区二区三区免费| 国产精品人人爽| 一本综合精品| 欧美高清在线播放| 久久精品日韩无码| 国产一区不卡| 精品国产污网站| 天堂一区在线观看| 在线观看欧美日韩电影| 一区二区国产盗摄色噜噜| 亚洲国产一区二区精品视频| 亚洲av成人精品日韩在线播放| 激情文学综合丁香| 国产精品久久久久免费a∨| 国产午夜精品无码| 欧美日韩1区2区3区| 最近2019中文字幕大全第二页| 风韵丰满熟妇啪啪区老熟熟女| 九九久久国产| 91精品福利在线| 国产成人无码精品久久久性色| 日本在线观看大片免费视频| 中文字幕亚洲综合久久菠萝蜜| 欧美午夜精品久久久久免费视 | 国产情侣一区| 欧美激情日韩图片| www青青草原| 久久久久亚洲| 精品久久国产精品| 久草福利资源在线| 99tv成人| 久久精品久久久久久| 成人一级片免费看| 成人三级视频| 中文字幕在线国产精品| 亚洲一二三四视频| 成人中文在线| 日韩在线免费av| 中国1级黄色片| 久久国产综合| 色黄久久久久久| 欧美肥妇bbwbbw| 亚洲五月综合| 欧美久久久精品| 欧美日韩大片在线观看| 欧美在线黄色| 国产69精品久久久| 成人免费看片98欧美| 国产精品一二| 国产成人精品一区二区| 中文无码精品一区二区三区| 日本va欧美va瓶| 国产日韩精品综合网站| 国产精品久久久久久久免费看| 久久99精品视频| 91精品入口蜜桃| 日本美女一级片| 久久色.com| 亚洲资源视频| 影音先锋男人在线资源| 亚洲第一综合色| 99精品在线免费视频| 六月婷婷综合| 欧美精品日韩精品| zjzjzjzjzj亚洲女人| 久久精品66| 在线观看国产精品淫| 9999热视频| 中国女人久久久| 国产精品日韩专区| 懂色av蜜臀av粉嫩av分享吧| 337p粉嫩大胆噜噜噜噜噜91av| 日韩精品一区二区三区丰满 | 午夜欧美不卡精品aaaaa| 成年人视频在线免费看| 六月丁香综合在线视频| www.一区二区三区| 男人的天堂在线免费视频| 国产精品嫩草久久久久| 久艹在线免费观看| 久久亚洲精品爱爱| 精品国产不卡一区二区三区| 91精品人妻一区二区| 7777久久香蕉成人影院| 欧美在线视频免费| 国产精选久久久| 久久这里只有精品视频网| 一本久久a久久精品vr综合| sm性调教片在线观看 | 日本免费观看网站| 综合欧美亚洲| www.国产一区| 狠狠人妻久久久久久| 国产精品亚洲视频| 色姑娘综合网| sm捆绑调教国产免费网站在线观看 | 国产精品夜夜夜爽张柏芝| а√天堂8资源中文在线| 欧美日韩成人高清| 欧美图片一区二区| 黄色精品一区| 91麻豆桃色免费看| 国产视频福利在线| 亚洲综合精品自拍| 国产精品嫩草影院8vv8| 日韩丝袜视频| 欧美国产日本高清在线| ,一级淫片a看免费| 久久亚洲精品国产精品紫薇 | av成人黄色| 99视频国产精品免费观看| 91短视频版在线观看www免费| 亚洲妇女屁股眼交7| 做a视频在线观看| 日本久久一二三四| 国产99在线|中文| 少妇人妻精品一区二区三区| 一区二区三区在线观看欧美 | 日韩黄色一级视频| 91丨porny丨国产入口| 亚洲一区二区三区av无码| 9.1麻豆精品| 在线播放精品一区二区三区| 五月天婷婷导航| 97国产一区二区| 免费一级特黄特色毛片久久看| 欧美日韩黄网站| 久久综合伊人77777| 亚洲一区二区天堂| 国产精品不卡一区二区三区| 9l视频白拍9色9l视频| 欧美日韩有码| 国产精品女视频| 91视频在线观看| 欧美日韩视频一区二区| 影音先锋制服丝袜| 蜜桃久久精品一区二区| 亚洲精品成人久久久998| 久久福利在线| 欧美成在线观看| 亚洲精品一区二区三区蜜桃| 夜夜精品浪潮av一区二区三区| 野战少妇38p| 国产精品一区毛片| 日本高清不卡三区| 国产第一亚洲| 久久视频在线直播| 午夜精品在线播放| 亚洲成人中文在线| 一区二区黄色片| 美国十次了思思久久精品导航| 亚洲三区在线| 亚洲精品在线国产| 欧美孕妇性xx| 香港伦理在线| 精品国产成人系列| 成人h动漫精品一区二区下载| 欧美国产一区二区在线观看| 波多野结衣免费观看| 亚洲天堂男人| 欧美一区二区三区电影在线观看| 成人在线不卡| 久久97久久97精品免视看| 日韩一级在线播放| 91福利视频网站| 可以直接看的黄色网址| 99re热这里只有精品视频| 成人黄色一区二区| 欧美激情亚洲| 茄子视频成人在线观看| 国产精品免费精品自在线观看 | 久久亚洲精品国产| 国产精品久久久久久久久久久免费看 | av激情在线观看| 懂色av一区二区夜夜嗨| 日韩中文字幕免费在线| 欧美精品自拍| 色涩成人影视在线播放| 亚洲午夜免费| 国产精品亚洲欧美导航| 成人午夜在线影视| 亚洲欧美日韩国产成人| 亚洲av无码一区二区三区dv | 99久久精品国产一区二区成人| 午夜精品免费在线| 国产在线观看免费视频软件| eeuss鲁片一区二区三区在线观看| 日韩爱爱小视频| 一区二区国产精品| 99re99热| 欧美精品尤物在线观看| 国产专区一区二区| 免费观看在线一区二区三区| 国产成人亚洲综合| 2021中文字幕在线| 久久av在线播放| 国产精品久久久久久久龚玥菲| 欧美精品一区二区在线观看| 一区二区精品视频在线观看| 好吊成人免视频| www.youjizz.com亚洲| 最新国产成人在线观看| 久久午夜精品视频| 久久久影视传媒| 精品人妻一区二区三区日产| 国产精品综合一区二区| 久久久久久久高清| 日本欧美加勒比视频| 男人揉女人奶房视频60分| 欧美日韩一区二区三区四区在线观看| 亚洲欧美日韩在线综合| 精品国产aⅴ| 欧美精品尤物在线| 秋霞影院一区二区三区| 国产嫩草一区二区三区在线观看| 国产免费区一区二区三视频免费| 国产精品自产拍在线观看中文 | 欧美午夜精品一区二区蜜桃| youjizz在线视频| 精品福利免费观看| 精品国产免费观看| 午夜a成v人精品| www日韩精品| 午夜成人免费电影| 日韩免费视频一区二区视频在线观看| 亚洲成av人**亚洲成av**| 精品少妇久久久| 亚洲高清在线视频| 九热这里只有精品| 欧美日韩国产精品| 久久久午夜影院| 色综合中文字幕国产| 国产精品久久久久久久久久久久久久久久久 | 国产美女精品一区二区三区| 亚洲免费成人在线视频| 国产在线播精品第三| 一级片黄色免费| 成人午夜碰碰视频| 在线免费观看a级片| 97国产一区二区| 丁香花五月婷婷| 国产精品国产馆在线真实露脸 | 成年人视频免费在线观看| 在线播放日韩精品| 黄色成年人视频在线观看| 欧美第一黄网免费网站| 91福利区在线观看| 日产精品久久久一区二区福利 | 国产激情一区二区三区在线观看| 成人免费直播在线| 欧美精品国产精品久久久| 精品久久视频| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 顶级嫩模精品视频在线看| 香港三日本8a三级少妇三级99| 97久久超碰国产精品电影| 久久久久久久久久久久| 国产精品大尺度| 久久久全国免费视频| 黑人巨大精品欧美一区免费视频| 波多野结衣视频网址| 91精品国产欧美一区二区18| 日本xxxxwww| 中文一区二区视频| caoporn-草棚在线视频最| 国产精品电影网| 日本精品在线播放| 麻豆精品传媒视频| 亚洲精品在线观看91| 国产中文字幕二区| 蜜臀a∨国产成人精品| www.四虎精品| 国产精品入口麻豆九色| 久草中文在线视频| 91黄视频在线| 亚洲国产精彩视频| 一个色综合导航| 国产精品186在线观看在线播放| 国产精品91久久久| 超碰成人97| 最新不卡av| 老牛嫩草一区二区三区日本 | 久久男人中文字幕资源站| 多男操一女视频| 精品国产成人在线| av男人天堂av| 中文字幕9999| 小视频免费在线观看| 亚洲一区久久久| 精品视频免费在线观看| www.av毛片| 国产精品白丝jk黑袜喷水| 免费看裸体网站| 五月激情综合网| www.日本在线观看| 中文字幕一区二区精品| 在线观看特色大片免费视频| 5g国产欧美日韩视频| 日韩三级在线| 北条麻妃在线视频| 菠萝蜜视频在线观看一区| 欧美第一页在线观看| 欧美午夜片在线看| 国产视频第一区| 啪一啪鲁一鲁2019在线视频| 亚洲成人偷拍| 水蜜桃在线免费观看| 美女视频黄a大片欧美| 91精彩刺激对白露脸偷拍| 性欧美疯狂xxxxbbbb| 亚洲AV无码一区二区三区性| 久久香蕉频线观| 色8久久久久| 亚洲午夜激情| 美女网站色91| 精品人伦一区二区三电影| 舔着乳尖日韩一区| 亚洲欧美国产高清va在线播放| 色av中文字幕一区| 成人做爰视频www| 欧美在线视频一区二区三区| 性久久久久久| 法国伦理少妇愉情| 色综合咪咪久久| 精华区一区二区三区| 人九九综合九九宗合| 亚洲桃色综合影院| 亚洲成熟丰满熟妇高潮xxxxx| 91亚洲资源网| www.久久精品视频| 亚洲天堂网站在线观看视频| 日韩三级影视| 日本日本精品二区免费| 久久精品综合| 成人黄色a级片| 欧美三级视频在线观看| 在线观看美女网站大全免费| 国产精品自在线| 亚洲欧洲中文字幕| 初高中福利视频网站| 亚洲国产三级在线| 日本人妖在线| 国产精品露脸自拍| 亚洲精品久久久| 精品一区二区三区四区五区六区| 亚洲国产日韩在线一区模特| 四虎电影院在线观看| 国产91精品最新在线播放| 精品国产91乱码一区二区三区四区| 成人免费在线观看视频网站| 18成人在线观看| 亚洲精品一区二区三区区别| 欧美一级免费视频| 不卡av一区二区| 韩国三级丰满少妇高潮| 偷拍日韩校园综合在线| 国产黄色片在线播放| 亚洲va久久久噜噜噜久久天堂| 亚洲视频日本| 亚洲国产日韩一区无码精品久久久| 欧美日韩国产综合视频在线观看| 在线中文字幕第一页| 国产青春久久久国产毛片| 日韩高清一区二区| 日本福利片在线观看| 亚洲精品一区二区三区婷婷月 | 日本v片在线高清不卡在线观看| 伊人久久久久久久久久久久久久| 精品少妇一区二区三区日产乱码 | 成人av免费| 久久av一区二区三区亚洲| 男男成人高潮片免费网站| 久青草免费视频| 中文字幕欧美亚洲| 丁香五月缴情综合网| av污在线观看| 亚洲大尺度视频在线观看| 成人av毛片| 国产一区再线| 国产在线不卡视频| 国产免费一级视频| 久久久久久国产免费 | 欧美深夜福利视频| 中文字幕一区二区视频| 欧美精品少妇|