樹莓派linux驅動學習之LED控制
硬體相關操作:#include <linux/miscdevice.h> #include <linux/delay.h> #include <asm/irq.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/mm.h> #include <linux/fs.h> #include <linux/types.h> #include <linux/delay.h> #include <linux/moduleparam.h> #include <linux/slab.h> #include <linux/errno.h> #include <linux/ioctl.h> #include <linux/cdev.h> #include <linux/string.h> #include <linux/list.h> #include <linux/pci.h> #include <asm/uaccess.h> #include <asm/atomic.h> #include <asm/unistd.h> #include <asm/io.h> #include <asm/uaccess.h> #include <linux/ioport.h> #include "bcm2835.h" // Blinks on RPi Plug P1 pin 11 (which is GPIO pin 17) #define PIN RPI_GPIO_P1_11 int open_state = 0; //檔案開啟狀態 static int leds_open(struct inode *inode, struct file *filp) { if(open_state == 0) { open_state = 1; printk("Open file suc!\n"); return 0; } else { printk("The file has opened!\n"); return -1; } } static int leds_ioctl(struct file*filp, unsigned int cmd, unsigned long arg) { switch(cmd) { case 0: bcm2835_gpio_clr(PIN); printk("LED OFF!\n"); break; case 1: bcm2835_gpio_set(PIN); printk("LED ON!\n"); break; default: return-EINVAL; } return 0; } static int leds_release(struct inode *inode, struct file *filp) { if(open_state == 1) { open_state = 0; printk("close file suc!\n"); return 0; } else { printk("The file has closed!\n"); return -1; } } static const struct file_operations leds_fops = { .owner = THIS_MODULE, .open = leds_open, .unlocked_ioctl = leds_ioctl, .release = leds_release, }; static struct miscdevice misc = { .minor =MISC_DYNAMIC_MINOR, .name ="my_leds", .fops =&leds_fops, }; static int __init leds_init(void) { int ret; //註冊混雜裝置 ret =misc_register(&misc); //配置功能選擇暫存器為輸出 bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); //設定輸出電平為高電平,LED亮 bcm2835_gpio_set(PIN); printk("ledsinit.\n"); return ret; } static void leds_exit(void) { //LED滅 bcm2835_gpio_clr(PIN); misc_deregister(&misc); printk("leds_exit\n"); } module_init(leds_init); module_exit(leds_exit); MODULE_AUTHOR("Hu Chunxu"); MODULE_LICENSE("GPL");
相關推薦
樹莓派linux驅動學習之LED控制
#include <linux/miscdevice.h> #include <linux/delay.h> #include <asm/irq.h> #include <linux/kernel.h> #include <linux/module.h&g
嵌入式Linux驅動學習之USART串列埠控制:基於AT91SAM9261EK
普通微控制器的串列埠操作比較容易,但是基於Linux系統的串列埠操作難不難呢?其實,基於Linux作業系統的串列埠操作分為兩個部分:串列埠驅動部分(底層驅動與設備註冊)與串列埠的應用程式(使用者程式)。一般廠家或是Linux核心已經提供了基於開發板的串列埠驅動,只需
嵌入式Linux驅動學習之引導篇——為什麼要選擇嵌入式Linux驅動這個方向?
醞釀了幾分鐘,依舊不知道如何開篇(這可能是工科男的一個通病吧)。索性隨意起來,想到哪寫到哪,這樣也許思維能變得更加活躍呢。 先交代一下背景,本人目前是國內某普通一本高校的一名大三學生,讀的專業是電氣工程及其自動化。轉程式猿也是目前大多數跨專業就業學生的首
linux驅動學習之ioctl介面
這裡先用例子介紹一下ioctrl介面的使用, 應用層的ioctl函式傳入的cmd和arg引數會直接傳入驅動層的ioctl介面,ioctl介面的命令有一定規範詳細檢視ioctl-number.txt檔案,這裡命令的定義不在規範內,先看下面測試的例子,驅動只實現ioctr
linux學習之程序控制
首先交代幾個基本概念 1.程式:程式是一個儲存在磁碟上某個目錄中的可執行檔案 2.程序:程式的執行例項被稱為程序 3.程序ID:每個程序都有一個非負整數型表示的唯一程序ID 除了程序ID,每個程序還有一些其他識別符號,下面是相關函式 #include<un
arduino學習之led相關--跑馬燈+電位器控制led亮滅
引子 一直挺喜歡搞點硬體的東西,可是每次都堅持不了多久。不過人總是要尋找寫改變的,之前未能堅持下去的不代表現在以及將來不能堅持下去,於是開始新的一波學習之旅。 開始 之前本來入了一塊開發板(51和微控制器都有),最近重拾微控制器,順帶入了一塊ardui
linux驅動開發6驅動框架之led
1.何謂驅動框架 1.1驅動是誰寫的 1)驅動開發工程師 2)核心維護者 1.2驅動程式設計協作要求 1)介面標準化 2)儘量降低驅動開發者難度 1.3到底什麼是驅動框架 1)核心中驅動部分維護者針對每個種類的驅動設計一套成熟的、標準的、典型的驅動實現,然後把
用shell來控制樹莓派上鍊接的LED
如果GPIO25上依然連著LED,並亮著,我們可以寫一個off.sh 的指令碼 來吧LED熄滅。 指令碼如下: #!/bin/bash echo Setting pin low echo 0>
Linux(樹莓派b+)學習~putty遠端登入
硬體條件:樹莓派b+主機板,8G sd卡,網線,滑鼠+鍵盤,LCD微雪7寸顯示器,膝上型電腦,電源線 軟體工具:Putty 想要用Putty遠端登入樹莓派不是那麼複雜,由於沒有無線網絡卡本文使用LCD顯示器手動配置靜態ip後通過網線直連膝上型電腦網絡卡,不能達到遠端登入x-
學習Linux C程式設計之程序控制程式設計
建立程序 fork fork 的定義 在 Linux 中,我們使用 fork 來建立一個子程序 fork 的返回值 fork 函式有些特殊,成功它返回 2 次,失敗返回 -1,利用這個特性可以判斷當前的程序是子程序還是父程序: 1. 在子程序中返回 0 2.
樹莓派真的適合學習Linux系統嗎?
樹莓派是一種便宜的卡片式Linux電腦,風靡全球。它是世界上眾多廉價又成熟的電腦之一,只要35美元,而且十分容易上手。 樹莓派能替代日常桌面計算機的多種用途,包括文書處理、電子表格、媒體中心甚至是遊戲。類似於樹莓派的卡片式電腦還有好多,比如說:香蕉派,橘子派,cubieb
linux驅動編寫之中斷處理
類型 div 應該 urn 處理方式 com pre turn 申請 一、中斷 1、概念 學過單片機的應該非常清楚中斷的概念,也就是CPU在正常執行程序過程中,出現了突發事件(中斷事件),於是CPU暫停當前程序的執行,轉去處理突發事件。處理完畢後,CPU又返回被
linux驅動開發之蜂鳴器驅動源碼分析(一)
linux 蜂鳴器 驅動 蜂鳴器的驅動源碼在/driver/char/buzzer/x210-buzzer.c文件中,源碼如下#include <linux/module.h> #include <linux/kernel.h> #include <linux
Linux系統學習之Ln(軟連接和硬鏈接)
director 連接 鏈接 然而 符號連接 硬鏈接 信息 oinstall 不同 可簡單理解為,軟連接:創建的軟連接文件是源文件的快捷方式,刪除創建的軟連接文件,源文件不受影響,連接消失。 硬鏈接:兩個連體的文件,修改其中一個文件,另外一個文件也會隨之更改;刪除其中一個文
linux驅動開發之framebuffer應用編程實踐(一)
linux驅動開發之framebuffer驅動 1、framebuffer應用編程 (1)打開設備文件 (2)獲取設備信息 宏定義的命令在/linux/fb.h中 不可變信息FSCREENINFO,使用ioctl參數有FBIOGET_FSCREENINFO宏名,表示用ioctl從
驅動學習之gpiolib的建立過程
linux驅動 gpiolib1:gpiolib的學習重點(1)gpiolib的建立過程:gpiolib和虛擬地址映射類似,也是需要一個建立過程的,因此在學習的時候,我們需要明白gpiolib是什麽時候建立的,建立函數在哪被調用的。(2)gpiolib的使用方法:申請、使用、釋放(3)gpiolib的架構:涉
樹莓派3b驅動dht11溫濕度傳感器
ros tran tex his std auto div color success 新建並打開C文件 touch dht11.c sudo vim dht11.c 編寫驅動程序 1 #include<wiringPi.h> 2 #i
Linux命令學習之—每天發一個命令—mkdir
linux 命令 mkdirLinux命令學習之—每天發一個命令—mkdirmkdir 命令用來創建指定的名稱的目錄,要求創建目錄的用戶在當前目錄中具有寫權限,並且指定的目錄名不能是當前目錄中已有的目錄。1.命令格式:mkdir [選項] 目錄...2.命令功能:通過 mkdir 命令可以實現在指定位置創建以
linux驅動系列之程序反匯編
.html 動態庫 log end 作用 文件 二進制文件 調試 可執行文件 摘抄網頁:http://www.169it.com/article/330129798173630299.html 參考網頁:http://www.cppblog.com/liu1061/art
樹莓派小車(三)Python控制小車
gpio 小車 沒有 物體 凹凸 img str 接口 表示 正文之前 由於最近忙於復習趕考,所以暫時沒有拿起樹莓派小車,直到昨天,終於空出時間來把代碼整理一下來和大家分享。 正文 在樹莓派小車系列之二中,講到了樹莓派的引腳定義方式有兩種: PHYSICAL NU