導航:首頁 > 編程系統 > linuxled驅動

linuxled驅動

發布時間:2023-08-06 23:50:35

1. 嵌入式需要學什麼嵌入式需要學哪些課程和內容

1.1 有哪些設備使用單片機或linux

所有的電子產品,所用技術都可以認為要麼是單片機,要麼是Linux;GUI方面主要是QT/Android,它們都是運行於Linux之上的。我們說的單片機不使用操作系統,但是使用單片機設備肯定遠遠超過Linux。很多人也是先學習單片機,從單片機進入電子工程師行業,日常生活中,有哪些產品使用單片機、Linux呢?下面舉一些例子:

  • 下面我們用類比和邏輯推導出嵌入式Linux系統的組成,沒錯,「推導」。
    從上圖可以知道:

  • 組成:嵌入式Linux系統= bootloader + linux內核 + 根文件系統(裡面含有APP)。

  • bootloader:它的目的是啟動內核,去哪等讀內核?讀到哪裡?去Flash等外設讀內核,存到內存里去。所以需要有Flash里外設的驅動能力,為了調試方便還會有網路功能。所以,可以認為 booloader = 裸機集合,它就是一個復雜的單片機程序

  • Linux內核:Linux內核的最主要目的是去啟動APP,APP保存在哪裡?保存在「根文件系統」里。「根文件系統」又保存在哪裡?在Flash、SD卡等設備里,甚至可能在網路上。所以Linux內核要有這些Flash、SD卡里設備的驅動能力。

  • 不僅如此,Linux內核還有進程調度能力、內存管理等功能。

  • 所以:Linux內核 = 驅動集合 + 進程調度 + 內存管理等。

  • 2.3 要學習bootloader嗎

  • Bootloader有很多種,常用的叫u-boot。

  • 在實際工作中,對於u-boot基本上是修修改改,甚至不改。但是u-boot本身是很復雜的,比如為了便於調試,它支持網路功能;有些內核是保存在FAT32分區里,於是它要能解析FAT32分區,讀FAT32分區的文件。

  • 花那麼多精力去學習u-boot,但是工作中基本用不到,這對初學者很不友善。

  • 所以,對於初學者,我建議:理解u-boot的作用、會使用u-boot的命令,這就可以了。

  • 如果你的工作就是修改、完善bootloader,那麼再去研究它吧。

  • 2.4 要學習Linux內核、要學習驅動程序嗎

  • 之前我們說過Linux內核 = 驅動集合 + 進程調度 + 內存管理等,如果要學習Linux內核,從驅動程序入手是一個好辦法。

  • 但是人人都要學習Linux內核、人人都要學習Linux驅動嗎?顯然不是。

  • 作為初學者,懂幾個簡單的驅動程序,有利於工作交流;理解中斷、進程、線程的概念,無論是對驅動開發、應用程序開發,都是很有好處的。

  • 所以對於初學者,建議前期只學習這幾個驅動:LED、按鍵、中斷。

  • LED驅動程序:這是最簡單的驅動程序。

  • 按鍵驅動程序:它也比較簡單,從它引入「中斷」。

  • 中斷:從「中斷」它可以引入:休眠-喚醒、進程/線程、POLL機制、非同步通知等概念。這些概念無論是對驅動開發,還是對應用開發,都很重要。

  • 所以,對於初學者,我建議必須學習這幾個驅動:LED、按鍵、中斷。

  • 入門之後,如果你想從事內核開發、驅動開發,那麼可以去鑽研幾個驅動程序(輸入系統、I2C匯流排、SPI匯流排等),掌握若干個大型驅動程序後,你對內核的套路就有所了解了,再去研究其他部分(比如進程管理、文件系統)時你會發現套路是如此通用。

  • 攝像頭(VL42)、音效卡ALSA驅動是Linux中比較復雜的2類驅動,它們是很難的,如果工作與此相關再去研究。

  • 2.5,要學習Linux應用程序嗎?先學一些基礎技能

  • 要學,即使以後你只想研究內核,一些基本的應用開發編寫能力也是需要的:

  • 基本設備的訪問,比如LCD、輸入設備

  • 進程、線程、進程通信、線程同步與互斥

  • 休眠-喚醒、POLL機制、信號

  • 網路編程

  • ①②③部分的知識,跟驅動有密切的關系,它們是相輔相承的。

  • 掌握了基本驅動開發能力、基本應用開發能力之後,在工作中你就可以跟別人友好溝通了,不至於一臉懵逼。

  • 2.6,應用程序是怎麼啟動的?要了解一下根文件系統

  • 你辛辛苦苦寫出了應用程序,怎麼把它放到板子上,讓它開機就自動啟動?

  • 你寫的程序,它依賴於哪些庫,這些庫放到板子上哪個目錄?

  • 怎麼做一個可升級的系統?即使升級中途斷電了,也要保證程序至少還可以運行老的版本

  • 這些都需要我們了解一下根文件系統。

  • 先了解一下init進程:它要讀取配置文件,根據配置文件啟動各個APP。

  • 了解了init進程,你就了解了根文件系統的組成,就可以隨心所欲裁剪系統,為你的項目製作出最精簡的系統。

  • 第3章 學習方法

    3.1 先不要打破砂鍋問到底

  • 嵌入式涉及的東西太多太雜了,如果心裡沒有主線,碰到什麼都要去研究個透徹,最終反而忘記自己要學什麼了。

  • 嵌入式涉及硬體知識、軟體知識,軟體里涉及匯編、ARM架構、C語言、Makefile、Shell;又分為bootloader、內核、驅動、基本的APP、GUI。

  • 比如我們會用到Makefile,了解它的基本規則,會用我們提供的Makefile就可以。

  • 不需要深入研究那些make函數,因為在工作中都有現成的Makefile給你使用,不需要自己去編寫一套Makefile。何必花上好幾天去深入研究它呢?

  • 比如我們會用到bootloader,難道又要花上幾個月來深入研究u-boot嗎?工作中基本不需要改u-boot,會用那幾個命令就可以。

  • 甚至有些學員先去買本shell的書來學習shell命令,何必?我們在視頻中用到什麼命令,你不懂時再去網路一下這些命令就可以了。

  • 不要脫離初學者的主線:應用基礎、驅動基礎。有了這2個基礎後,你想深入研究某部分時,再去花時間吧。

  • 3.2 思路要清晰,不怕抄代碼

  • 視頻里的代碼,請你一定要自己去寫一次、寫多次。為什麼我現在寫驅動那麼熟?我2009年在華清遠見上課時,

  • 每次上課我都要給學生寫一次那些驅動,十幾次下來閉著眼睛都知道內核的套路了。

  • 記不住那些函數?我也記不住,我都是去參考同類的驅動程序,這又不是閉卷考試。

  • 但是要理清楚思路,你寫這個程序要完成什麼功能、怎麼實現這些功能?這個要弄清楚。

  • 有了思路後再寫代碼,不知道怎麼寫?沒關系,看看視頻,看看示例,然後關閉視頻看看能否自己寫出來。

  • 3.3 對自己的方向很了解,我只能帶你到這里了

  • 我的專長是操作系統,是快速地帶領大家掌握一些項目開發的基礎知識。

  • 如果你決定深入研究某方面時,我並不能帶你多久。你要去看源碼,去看這方面的專業書籍。

  • 比如想深入鑽研內核的內存管理時,它有頁表映射(你需要閱讀ARM架構的手冊)、SLAB分配器、vmalloc/malloc實現、mmap實現、缺頁中斷、父進程子進程之間的頁面管理等等,內容非常多。有時候連書籍都沒有,你需要直接啃代碼。

  • 當你想從事某個行業時,就需要深入研究行業相關的知識。

  • 比如CAN匯流排,它可以寫成一本書:CAN協議、CAN報文、Socket CAN、車身網路拓撲結構,CAN應用報文,CAN網路管理報文,CAN診斷報文。

  • 想做物聯網網關,需要深入研究MQTT,MQTT協議相對簡單,但是MQTT英文原版協議有130多頁,中文版有近100頁,是一本小書了。

  • 每個行業都有自己的業務邏輯,在掌握基本的編程能力之一,你需要結合具體的業務去深入學習。

  • 2. ARM linux設備驅動,寫的驅動必須在編譯內核的時候添加到內核才能用嗎比如led驅動,我生成

    linux2.6以後的內核在載入驅動的時候是可以動態添加的,不用每次添加之後都make zImage,
    你只用專先編譯一邊,然後就可以一屬直用這個做驅動的開發嘍,
    只要生成了led.ko,然後insmod led.ko,就可以了,至於是不是用應用層,我覺得你還是先學一下應用層的東西吧,比如nuix系統高級編程之內的書,

    3. linux系統編寫驅動時,怎樣用C語言去訪問硬體

    在linux系統上編寫驅動要訪問硬體,首先要地址映射,因為有了linux系統後程序中所使用是地址都是虛擬地址,所以需要經過ioremap重映射後得到需要的虛擬地址,然後用ioread32和iowrite32就可以進行讀寫操作了。如下是led的操作:
    int init_led_device(struct led_dev_t *l)
    {
    l->phys = 0x7F008000;
    l->virt = ioremap(l->phys, SZ_4K);

    l->gpmcon = l->virt + 0x820;
    l->gpmdat = l->virt + 0x824;
    return 0;
    }
    void led_config(struct led_dev_t *l)
    {
    l->reg = ioread32(l->gpmcon);
    l->reg &= ~(0xf << 0);
    l->reg |= (0x1 << 0);
    iowrite32(l->reg, l->gpmcon);
    }

    4. linux驅動編寫過程中遇到的幾個問題及解決

    1、顯示錯誤:unknown field 'ioctl' specified in initializer
    解決辦法,查看內核include/linux/fs.h文件,發現里邊定義的struct file_operations中沒有ioctl,這里我們用.unlocked_ioctl取代,形參去掉 struct inode*。
    2、在應用程序中,將ioctl替換為unlocked_ioctl後,會出現以下錯誤:undefined reference to `unlocked_ioctl'。因為系統調用ioctl是沒有改變的,還是原來的系統調用介面,只是系統調用的實現中,ioctl()變成了unlocked_ioctl,在應用層你根本不用關注內核中的這些實現上的改變,你只需要按照系統調用的用法用就可以了。所以把應用程序里的unlocked_ioctl改為ioctl,編譯,OK,通過。
    3、驅動編譯完成,在開發板上insmod,出現以下錯誤:
    WARNING: at lib/kobject.c:595 kobject_put+0x50/0x64()
    kobject: '撲' (cbc60a00): is not initialized, yet kobject_put() is being called.
    ---[ end trace da227214a82491b9 ]---
    insmod: cannot insert 'led_dev.ko': Cannot allocate memory
    原來是忘了寫內存申請的代碼,添加kmalloc和memset。
    4、再次insmod,出現下列錯誤代碼:
    Unable to handle kernel paging request at virtual address 7f008820
    pgd = cbc70000
    [7f008820] *pgd=00000000
    Internal error: Oops: 5 [#1]
    Moles linked in: led_dev(+)
    CPU: 0 Tainted: G W (3.0.1 #439)
    PC is at led_init+0xa8/0x108 [led_dev]
    LR is at kobj_map+0x144/0x154
    pc : [<bf0020a8>] lr : [<c0246e70>] psr: 60000013
    sp : cbc6bf10 ip : cbc6beb0 fp : cbc6bf24
    r10: 00000000 r9 : bf002000 r8 : cbc6a000
    r7 : 00000000 r6 : bf0002bc r5 : 00000000 r4 : 00000000
    r3 : 00000000 r2 : 00000000 r1 : 7f008000 r0 : 00000000
    Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
    Control: 00c5387d Table: 5bc70008 DAC: 00000015
    Process insmod (pid: 112, stack limit = 0xcbc6a268)
    Stack: (0xcbc6bf10 to 0xcbc6c000)
    bf00: 00000000 c07463c0 cbc6bf7c cbc6bf28
    bf20: c00343c8 bf00200c cbc6bf64 cbc6bf38 c0073e24 00000000 00000000 00000000
    bf40: 00000000 0000ef52 000d5bf9 bf0002bc 00000000 0000ef52 000d5bf9 bf0002bc
    bf60: 00000000 c0034ce8 cbc6a000 00000000 cbc6bfa4 cbc6bf80 c0085960 c0034398
    bf80: c00e8738 c00e8610 402004a8 000dfcf8 00000000 00000080 00000000 cbc6bfa8
    bfa0: c0034b40 c00858e0 402004a8 000dfcf8 00b5d038 0000ef52 000d5bf9 ffff5f01
    bfc0: 402004a8 000dfcf8 00000000 00000080 00000069 00000001 be9c2e64 be9c2e68
    bfe0: be9c2e68 be9c2b14 00021cfc 402c1d74 60000010 00b5d038 5fffe821 5fffec21
    [<bf0020a8>] (led_init+0xa8/0x108 [led_dev]) from [<c00343c8>] (do_one_initcall+0x3c/0x188)
    [<c00343c8>] (do_one_initcall+0x3c/0x188) from [<c0085960>] (sys_init_mole+0x8c/0x1a4)
    [<c0085960>] (sys_init_mole+0x8c/0x1a4) from [<c0034b40>] (ret_fast_syscall+0x0/0x30)
    Code: e59f0060 eb52980e ea00000b e59f1058 (e5910820)
    ---[ end trace da227214a82491b9 ]---
    Segmentation fault
    最後是各種網路,各種谷歌,參考別人的驅動,發現它們的開發板硬體地址並不是自己寫的頭文件,而是調用mach中已經定義好的頭文件,好吧,尋找相應開發板,相應埠的地址頭文件,在驅動文件中添加以下頭文件:
    #include <mach/map.h>
    #include <mach/regs-gpio.h>
    #include <mach/gpio-bank-m.h>
    Ok,打完收工,開發板,測試。運行無阻。完成。
    5、在做到DS18B20溫度測試模塊驅動的時候,看到網上的代碼有些函數可以直接對引腳的功能進行設置,比如:s3c2410_gpio_cfgpin(DQ_PIN, DQ_PIN_OUTP); 但是對應於我的s3c6410的開發板就不知道用什麼函數了,網上找了半天,發現以上函數是在#include <plat/gpio-cfg.h>中,6410中對應的函數為:extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to);
    6、最近學習移植linux內核,移植了新的linux內核以及掛載了新的NFS之後, 重新測試led驅動,發現安裝模塊以後,運行測試程序會出現以下錯誤:
    -/bin/sh: ./main: not found(main為主機上編譯好的測試程序)
    原因:
    編譯busybox的時候選擇了靜態編譯:
    Build Options->
    Build BusyBox as a static binary (no shared libs)
    Build with Large File Support (for accessing file>2GB)
    如果選擇 Build BusyBox as a static binary (no shared libs) 方式進行編譯時,所需的庫已經與程序靜態地鏈接在一起,這些程序不需要額外的庫就可以單獨運行,但是自己編寫的程序在文件系統上運行必須採用靜態編譯,否則會報諸如:bin/sh: main :not found的錯誤。
    靜態編譯如:
    arm-linux-gcc –static main.c –o main
    7.按照普通方法安裝配置tftp,並且關閉了防火牆,但是在開發板上tftp主機,總會報錯:
    tftp: server error: (0) Permission denied

    解決辦法:
    修改文件 /etc/sysconfig/selinux,設定其中的
    SELINUX=disabled
    然後重啟電腦即可

    5. 嵌入式Linux設備驅動開發詳解的目錄

    第1章嵌入式系統與驅動程序1
    本章目標1
    1.1嵌入式系統概述1
    1.1.1嵌入式系統的概念1
    1.1.2嵌入式系統的特點2
    1.1.3嵌入式系統的體系結構2
    1.2嵌入式處理器介紹4
    1.2.1嵌入式處理器分類4
    1.2.2ARM概述5
    1.2.3ARM系列晶元簡介5
    1.3嵌入式操作系統介紹7
    1.3.1主流嵌入式操作系統7
    1.3.2嵌入式系統的發展狀況8
    1.3.3嵌入式Linux介紹8
    1.3.4嵌入式系統開發環境的建立9
    1.3.5嵌入式軟體開發10
    1.4嵌入式Linux驅動程序12
    1.4.1嵌入式Linux的內核空間和用戶空間12
    1.4.2嵌入式Linux的文件系統12
    1.4.3嵌入式Linux的設備管理14
    1.4.4嵌入式Linux的驅動程序16
    1.5知識索引20
    1.6思考與練習21
    第2章簡單的字元設備驅動程序23
    本章目標23
    2.1嵌入式Linux字元設備的驅動程序結構23
    2.1.1嵌入式Linux驅動程序常用的頭文件24
    2.1.2File_operations結構體24
    2.1.3字元設備驅動程序的入口25
    2.1.4驅動程序的設備注冊26
    2.2設備驅動程序中的具體問題27
    2.2.1I/O埠28
    2.2.2內存操作29
    2.2.3中斷處理29
    2.3LED的驅動程序實例及測試30
    2.3.1LED I/O埠設置30
    2.3.2LED硬體電路設計32
    2.3.3LED驅動程序設計33
    2.3.4LED測試程序設計36
    2.4嵌入式Linux中斷處理驅動程序及測試37
    2.4.1中斷處理過程37
    2.4.2中斷向量表39
    2.4.3中斷的處理模式39
    2.4.4中斷的優先順序40
    2.4.5中斷的嵌套40
    2.4.6中斷源的擴展40
    2.4.7中斷控制寄存器的設置41
    2.5按鍵中斷的驅動程序實例45
    2.5.1按鍵中斷的電路設計45
    2.5.2按鍵中斷的驅動程序設計45
    2.6知識索引48
    2.7思考與練習49
    第3章數字顯示驅動程序50
    本章目標50
    3.1數字顯示器50
    3.1.1數碼管簡介50
    3.1.2數碼管的分類51
    3.1.3數碼管顯示原理51
    3.2數碼管顯示電路的硬體設計52
    3.2.1解碼器的使用52
    3.2.2數碼管的驅動方式53
    3.2.3串/並變換的解碼設計55
    3.3數碼管驅動程序實例56
    3.3.1驅動程序的初始化和卸載模塊56
    3.3.2文件操作結構模塊57
    3.3.3數碼管的打開模塊57
    3.3.4數碼管的讀寫模塊58
    3.3.5數碼管的I/O控制模塊58
    3.3.6數碼管的退出模塊58
    3.3.7驅動程序的模塊載入和卸載59
    3.4數碼管顯示電路測試程序設計60
    3.4.1數碼管測試設計60
    3.4.2數碼管測試程序60
    3.4.3數碼管測試效果61
    3.5知識索引61
    3.6思考與練習62
    第4章鍵盤驅動程序63
    本章目標63
    4.1鍵盤介面概述63
    4.1.1鍵盤的分類63
    4.1.2鍵盤的防抖65
    4.1.3鍵盤的掃描65
    4.1.4鍵盤的緩沖演算法67
    4.2鍵盤的驅動設計實例67
    4.2.1鎖存器和緩沖器擴展鍵盤67
    4.2.2鎖存器和緩沖器的介面68
    4.2.3鎖存器和緩沖器擴展鍵盤驅動程序設計69
    4.2.4鎖存器和緩沖器擴展鍵盤測試程序設計71
    4.3智能控制晶元HD7279擴展鍵盤72
    4.3.1HD7279的電路設計72
    4.3.2HD7279的指令介紹73
    4.3.3HD7279的串列介面74
    4.3.4HD7279的驅動程序設計75
    4.3.5HD7279的測試程序設計84
    4.4知識索引85
    4.5思考與練習85
    第5章A/D驅動程序86
    本章目標86
    5.1A/D轉換的過程86
    5.1.1采樣和保持86
    5.1.2量化和編碼88
    5.1.3ADC的分類89
    5.2A/D轉換器的基本原理89
    5.2.1逐次逼近型A/D轉換器89
    5.2.2雙積分型A/D轉換器90
    5.2.3V/F和F/V型轉換器93
    5.2.4其他A/D轉換器95
    5.3A/D轉換器介面技術97
    5.3.1ADC的主要參數及意義97
    5.3.2ADC的電路選擇方法98
    5.3.3ADC實際應用中的問題99
    5.4S3C2410 A/D轉換驅動設計實例99
    5.4.1S3C2410的A/D轉換電路99
    5.4.2S3C2410X的A/D轉換控制寄存器100
    5.4.3S3C2410X的A/D轉換數據寄存器101
    5.4.4S3C2410X中A/D轉換驅動程序的設計102
    5.4.5S3C2410X中A/D轉換測試程序的設計105
    5.5知識索引106
    5.6思考與練習107
    第6章D/A驅動程序108
    本章目標108
    6.1D/A的原理介紹108
    6.1.1D/A轉換的概念及基本原理108
    6.1.2電子模擬開關109
    6.1.3D/A轉換器的基本結構110
    6.1.4D/A轉換的靜態參數114
    6.1.5D/A轉換的動態參數115
    6.2D/A轉換的硬體電路設計116
    6.2.1D/A轉換的介面技術116
    6.2.2D/A轉換晶元介紹117
    6.2.3D/A轉換的電路設計118
    6.3D/A轉換器的驅動程序實例118
    6.3.1D/A驅動程序中的宏定義118
    6.3.2D/A的模塊載入118
    6.3.3D/A轉換器的文件操作模塊119
    6.3.4D/A轉換器的讀寫控制模塊120
    6.3.5D/A轉換器的打開、退出模塊120
    6.4測試程序的設計120
    6.4.1D/A測試程序中的宏定義121
    6.4.2D/A測試程序的主函數121
    6.4.3D/A測試程序中的功能函數122
    6.4.4D/A測試程序中的功能列印函數123
    6.4.5D/A測試程序中的波形生成函數123
    6.4.6D/A測試程序的效果124
    6.5知識索引125
    6.6思考與練習125
    第7章LCD驅動程序126
    本章目標126
    7.1LCD顯示器概述126
    7.1.1液晶126
    7.1.2LCD顯示屏的背光127
    7.1.3LCD顯示器的分類127
    7.1.4LCD的顯示原理127
    7.1.5LCD的驅動方式130
    7.1.6LCD的常用指標131
    7.2LCD的顯示介面131
    7.2.1灰度STN的時序132
    7.2.2彩色STN的時序133
    7.2.3TFT的時序134
    7.3嵌入式處理器的LCD控制器136
    7.3.1LCD控制器136
    7.3.2LCD控制器的設置137
    7.3.3LCD的字元顯示緩存139
    7.4LCD的驅動程序設計140
    7.4.1LCD驅動程序相關的宏定義140
    7.4.2LCD驅動程序的底層操作函數142
    7.4.3LCD驅動程序提供的API145
    7.4.4LCD驅動程序的模塊化載入151
    7.4.5LCD的測試程序152
    7.5基於Framebuffer的LCD驅動程序實例155
    7.5.1Framebuffer概述155
    7.5.2LCD的電路連接155
    7.5.3Framebuffer設備驅動程序的結構156
    7.5.4Framebuffer設備驅動程序的設計159
    7.5.5Framebuffer設備測試程序的設計164
    7.5.6嵌入式Linux常用的GUI166
    7.6知識索引166
    7.7思考與練習167
    第8章觸摸屏驅動程序168
    本章目標168
    8.1觸摸屏概述168
    8.2觸摸屏的分類168
    8.2.1電阻技術觸摸屏168
    8.2.2表面聲波技術觸摸屏169
    8.2.3電容電感技術觸摸屏170
    8.2.4紅外線技術觸摸屏170
    8.3觸摸屏的特性171
    8.3.1透明度和色彩失真171
    8.3.2反光性171
    8.3.3清晰度171
    8.3.4漂移172
    8.3.5檢測和定位172
    8.4觸摸屏的硬體電路設計172
    8.4.1電阻式觸摸屏的電路原理172
    8.4.2電阻式觸摸屏原點的定位173
    8.4.3電阻式觸摸屏的電路連接174
    8.5觸摸屏的驅動程序實例176
    8.5.1觸摸屏介面的模式176
    8.5.2A/D轉換和觸摸屏寄存器的設置177
    8.5.3觸摸屏的坐標179
    8.5.4觸摸屏的電路連接180
    8.5.5觸摸屏的驅動程序介面181
    8.6測試程序的設計182
    8.6.1觸摸屏的數據定義183
    8.6.2觸摸屏的數據處理183
    8.6.3觸摸屏的運行測試185
    8.7知識索引186
    8.8思考與練習187
    第9章CAN匯流排驅動程序188
    本章目標188
    9.1CAN匯流排介面設計188
    9.1.1CAN匯流排概述188
    9.1.2CAN的工作特點及主要優點189
    9.1.3CAN匯流排的電氣特徵和MAC幀結構189
    9.2嵌入式處理器上CAN匯流排介面的擴展190
    9.2.1SJA1000簡介190
    9.2.2SJA1000擴展191
    9.3SJA1000擴展CAN匯流排介面的設計192
    9.3.1CAN 控制器SJA1000的操作模式192
    9.3.2CAN控制器SJA1000的特徵功能193
    9.3.3CAN 控制器SJA1000的Basic CAN模式設置194
    9.4SJA1000擴展CAN匯流排介面的通信196
    9.4.1通過CAN匯流排建立通信的步驟196
    9.4.2SJA1000的初始化196
    9.4.3驅動程序的結構設計198
    9.4.4驅動程序init、exit、open、close函數的實現200
    9.4.5驅動程序read、write函數的實現201
    9.4.6驅動程序interrupt、ioctl函數實現202
    9.4.7測試程序的編寫202
    9.5驅動程序的載入204
    9.6知識索引204
    9.7思考與練習205
    第10章IIC匯流排驅動程序206
    本章目標206
    10.1IIC匯流排概述206
    10.1.1IIC匯流排介紹206
    10.1.2IIC匯流排引入的原因206
    10.1.3IIC匯流排的特點206
    10.1.4IIC匯流排的基本結構207
    10.1.5IIC匯流排的術語207
    10.1.6IIC匯流排的工作208
    10.1.7IIC匯流排的競爭仲裁209
    10.1.8IIC匯流排的工作流程210
    10.2嵌入式處理器的IIC介面211
    10.2.1IIC匯流排控制寄存器212
    10.2.2IIC匯流排控制/狀態寄存器213
    10.2.3IIC匯流排地址寄存器214
    10.2.4IIC匯流排移位數據寄存器214
    10.2.5S3C2410中與IIC對應的I/O埠215
    10.3基於IIC的鍵盤晶元應用216
    10.3.1ZLG7290的功能217
    10.3.2ZLG7290的控制方式218
    10.3.3ZLG7290的寄存器218
    10.3.4ZLG7290的通信介面219
    10.3.5ZLG7290的指令介紹219
    10.4IIC匯流排驅動程序實例221
    10.4.1ZLG7290的電路連接221
    10.4.2ZLG7290的通信流程223
    10.4.3ZLG7290驅動中變數的定義225
    10.4.4ZLG7290驅動中實時時鍾的改變226
    10.4.5ZLG7290和IIC寄存器的初始化227
    10.4.6ZLG7290驅動程序的模塊化228
    10.4.7ZLG7290的文件操作結構228
    10.5IIC匯流排的測試程序230
    10.6知識索引231
    10.7思考與練習231
    第11章音頻匯流排驅動程序232
    本章目標232
    11.1音頻匯流排介面概述232
    11.1.1音頻的采樣精度233
    11.1.2音頻編碼233
    11.2IIS音頻匯流排介面233
    11.2.1IIS匯流排的物理連接233
    11.2.2IIS的匯流排協議234
    11.2.3IIS匯流排的硬體設計235
    11.2.4IIS匯流排的寄存器236
    11.3AC97音頻匯流排介面239
    11.4IIS匯流排的驅動程序設計240
    11.4.1音頻設備基礎知識240
    11.4.2音頻設備文件241
    11.4.3WAV聲音文件243
    11.4.4音頻設備和驅動程序的通信243
    11.4.5設備的初始化和載入244
    11.4.6DMA的操作和宏定義246
    11.4.7audio設備文件的操作248
    11.4.8mixer設備文件的操作260
    11.5音頻驅動程序的測試262
    11.6知識索引262
    11.7思考與練習263
    第12章IDE介面驅動程序264
    本章目標264
    12.1IDE介面概述264
    12.1.1硬碟知識介紹264
    12.1.2IDE介面標准267
    12.1.3IDE介面的傳輸模式269
    12.1.4IDE介面寄存器269
    12.2IDE介面驅動程序的移植271
    12.2.1嵌入式Linux下IDE驅動程序介面271
    12.2.2嵌入式Linux下IDE驅動程序272
    12.2.3IDE硬碟的讀/寫操作274
    12.3IDE驅動程序測試282
    12.3.1磁碟文件系統簡介283
    12.3.2IDE分區測試283
    12.4知識索引285
    12.5思考與練習285
    第13章快閃記憶體晶元的驅動程序286
    本章目標286
    13.1快閃記憶體晶元概述286
    13.1.1快閃記憶體晶元的物理特性286
    13.1.2嵌入式文件系統概述289
    13.1.3MTD體系介紹289
    13.1.4Flash專有名詞291
    13.2NAND Flash291
    13.2.1NAND Flash的結構291
    13.2.2NAND Flash的操作292
    13.2.3NAND Flash控制器294
    13.2.4NAND Flash的時序296
    13.2.5NAND Flash的驅動程序實例297
    13.3NOR Flash301
    13.3.1NOR Flash的結構301
    13.3.2NOR Flash的操作302
    13.3.3NOR Flash的驅動程序實例303
    13.4基於快閃記憶體的文件系統307
    13.5知識索引309
    13.6思考與練習310
    第14章USB 設備驅動程序311
    本章目標311
    14.1USB介面概述311
    14.1.1USB系統311
    14.1.2USB的電氣特性312
    14.1.3USB匯流排的拓撲結構313
    14.1.4USB的通信協議313
    14.2嵌入式系統中USB的使用315
    14.2.1OHCI概述315
    14.2.2Host介面硬體設計316
    14.3嵌入式系統中USB設備的驅動程序設計316
    14.3.1

    6. 嵌入式linux設備驅動,無法打開設備文件

    1. ls /dev/* 看看有沒有你的LED節點
    2.cat /proc/devices 看看有沒有相關LED驅動信息。

    ===============================
    static const struct file_operations fops_led =
    {
    .owner = THIS_MODULE,
    //.open = open_led,
    .unlocked_ioctl = unlocked_ioctl_led,
    };

    都屏蔽了open函數,內怎麼打開容?

    7. 我在ubuntu9。04下,用arm-linux-gcc 交叉編譯了一個led驅動程序。引用的內核源碼放在/usr/src/linux2.6

    如果你要編譯一個 驅動 首先你那個 linux內核事編譯好的。makefile 裡面耀指向你的linux內核目錄
    你在試試

    閱讀全文

    與linuxled驅動相關的資料

    熱點內容
    成都製作pdf文件 瀏覽:735
    怎麼樣點開電腦裡面的網路連接 瀏覽:755
    微信怎麼退出賬號 瀏覽:32
    w微信開發者工具 瀏覽:325
    資料庫還原附加 瀏覽:713
    打包成exe執行文件 瀏覽:652
    信豐營銷app有哪些 瀏覽:463
    蘋果文件下載項如何下載 瀏覽:179
    ps摳婚紗教程 瀏覽:203
    如何在移動硬碟上隱藏文件夾 瀏覽:451
    瑞虎8老車機怎麼刷app 瀏覽:992
    學ui設計要學java嗎 瀏覽:275
    淘寶票房數據源怎麼調整 瀏覽:470
    iphone5s升級ios卡黑屏 瀏覽:622
    u盤沒用的文件刪不了怎麼辦 瀏覽:561
    文件夾解鎖工具 瀏覽:528
    creo如何減小stp文件大小 瀏覽:857
    法那科英制螺紋數控怎麼編程 瀏覽:430
    戀舞最新升級獎勵表 瀏覽:149
    四川語音交友戀愛app有哪些 瀏覽:528

    友情鏈接