Led驱动实现心得
Led驅動實現心得
? LED驅動的實現原理
? ? ? ? 盡管linux驅動直接與硬件打交道,但并不是Linux驅動直接向硬件中的內存寫數據,而是與本機的I/O內存進行交互。所謂i/o內存是通過各種接口(PCI USB 藍牙 以太網口)連接到主機(pc 手機)的硬件(網卡 聲卡? 攝像頭)在主機內存中映射。例如,在Ubuntu? Linux上運行的驅動只需要訪問運行Ubuntu? Linux的主機中的I/O內存即可,然后Linux內核會利用I/O內存中數據硬件交互。?Linux內核提供了多個與I/O內存交互的函數,如ioread16、ioread32、iowrite16、iowrite32等。Linux內核的內存管理模塊負責同步I/O內存與硬件中的數據。
? ? ? ? 每一個連接linux的硬件在I/O內存中都會有映射首地址。在使用ioread16、ioread32等函數讀寫I/O內存時需要指定這些首地址,開發板上的led也有其映射首地址。
? ? ? ??此例子的原理:如圖,LED1-LED2分別與GPC0_3、GPC0_4相連,通過GPC0_3、GPC0_4引腳的高低電壓來控制三極管的導通性,從而控制LED的亮滅。
????
根據三極管的特性,當這個引腳輸出高電平時,集電極和發射極導通,發光二極管點亮;反之,發光二極管熄滅;
通過控制GPC0CON和GPC0DAT來控制GPC0_3和GPC0_4對應的led。
?
?
? ? ? ?建立工作目錄,拷貝源碼
? ? ? ? ? ? ? ? $? mkdir worker/driver
? ? ? ? ? ? ? ?$? cd /workdir/driver/
? ? ? ? ? ? ? ?$? cp? /mnt/hgfs/share/linux-3.2-FS210-V3.tar.bz2? ./
? ? ? ? ? ? ? $? cp?? /mnt/hgfs/share/linux3.2Drivers/? ./? -a
? ? ? 解壓內核代碼
? ? ? ? ? ? ?$? tar? xvf? linux-3.2-FS210-v3.tar.bz2
? ? 編譯內核源碼
? ? ? ? ? ? $ ??cd? /workdir/driver/linux-3.2-FS210-V3
? ? ? ? ? ? $??? cp? fs210_defconfig? .config
? ? ? ? ? ? $?? make? zImage
? ? ?編譯驅動源碼
? ? ? $?? cd ?/workdir/driver/linux-3.2Drivers/fs210_led
修改Makefile文件,修改為我們的內核源碼的路徑和交叉工具鏈。保存退出。
$ make
查看編譯生成的ko文件,并拷貝到nfs文件系統目錄中。
$? ls
$?? cp? fs210_led.ko? /source/rootfs/
?執行make ?led_test命令編譯測試文件。
$? make ?led_test
??執行代碼:
啟動開發板,查看文件系統文件
$? ls
加載驅動
$?? insmod? fs210_led.ko
$?? mknod??? /dev/led? c? 250 0
$?? chmod?? 777??? /dev/led
$??? ./led_test
實驗現象
Led1間隔閃爍。
?http://www.cnblogs.com/cherry-blossom/
轉載于:https://www.cnblogs.com/cherry-blossom/p/5560640.html
總結
- 上一篇: linux删除非空目录
- 下一篇: 字符集详解 --------------