FL2440添加自帶led驅動

FL2440添加自帶led驅動

在之前學習驅動自己寫過led的驅動程序,其實s3c2440對於驅動已經支持得非常好,內核裏面已經有了led的驅動程序,我們要使能led驅動只需要稍作修改。

make menuconfig 配置

 Device Drivers  ---> 
     [*] LED Support  ---> 
          [*]   LED Class Support  
          <*>   LED Support for Samsung S3C24XX GPIO LEDs//添加LED支持 

源碼修改

s3c24xx系列的芯片的led硬件信息基本一致,因此內核將led的硬件設備信息源碼放在了 arch/arm/plat-s3c24xx/common-smdk.c,對照芯片手冊,我們要把led0~led3的相關GPIO分別配置成PB5,PB6,PB8,PB10

vim arch/arm/plat-s3c24xx/common-smdk.c
/* LED devices */

 static struct s3c24xx_led_platdata smdk_pdata_led4 = {
 .gpio       = S3C2410_GPB(5),/*led0爲PB5*/
 .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
 .name       = "led0",
 .def_trigger    = "timer",
  };

 static struct s3c24xx_led_platdata smdk_pdata_led5 = {
 .gpio       = S3C2410_GPB(6),/*led1爲PB6*/
 .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
 .name       = "led1",
 .def_trigger    = "nand-disk",
 };

 static struct s3c24xx_led_platdata smdk_pdata_led6 = {
 gpio       = S3C2410_GPB(8),/*led2爲PB8*/
 .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
 .name       = "led2",
 };

 static struct s3c24xx_led_platdata smdk_pdata_led7 = {
 .gpio       = S3C2410_GPB(10),/*led3爲PB10*/
 .flags      = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
  .name       = "led3",
 };

完成以上操作之後重新編譯內核並且下載到開發板。

測試運行

對於向led這樣的設備模型,系統認爲所有的設備都是掛接在總線上的,而要使設備工作,就需要相應的驅動。設備模型會產生一個虛擬的文件系統——sysfs,它給用戶提供了一個從用戶空間去訪問內核設備的方法,它在linux裏的路徑是/sys。如果要寫程序訪問sysfs,可以像讀寫普通文件一樣來操作/sys目錄下的文件。

下載到內核之後會在/sys/class/目錄下生成leds目錄,會看到led0 led1 led2 led3,在leds目錄下執行ls -l 可知,led0、led1 、led2、 led3都是軟連接
Alt text

進入到led0目錄下,可以看到brightness 等文件
Alt text
其中brightness就是控制等亮滅的文件,max_brightness可以控制亮滅程度的最大值假如設定是100就是0到100代表不同的亮度(需要單板硬件的支持)。
- 向brightness文件中寫入1控制燈亮
- 向brightness文件中寫入0控制燈亮

cat > brightness //向brightness寫入數據
可以看到,寫入1時,led0點亮;寫入0時,led0熄滅。對於其他的led燈也是同樣的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章