platform裝置驅動之LED(misc裝置)

2021-06-06 02:40:13 字數 2717 閱讀 6885

一、開發環境

1、硬體平台:fs2410

2、主機:ubuntu 10.10

3、核心版本:linux 2.6.35

4、交叉編譯工具鏈:arm-none-linux-gnueabi-

二、詳細**

led_device.c:

#include #include #include #include #include struct resource led_resource = 

};struct platform_device led_device = ;

static int __init led_device_init(void)

static void __exit led_device_exit(void)

module_init(led_device_init);

module_exit(led_device_exit);

module_author("yhr");

module_license("gpl");

led_driver.c

#include #include #include #include #include #include #include #include #include #include #include static volatile unsigned int *gpfcon;

static volatile unsigned int *gpfdat;

void init_led(void)

static int led_open(struct inode *inode, struct file *filp)

static int led_release(struct inode *inode, struct file *filp)

static ssize_t led_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos)

static ssize_t led_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos)

static struct file_operations led_fops = ;

struct miscdevice led_dev = ;

static int led_probe(struct platform_device *pdev)

size = resource_size(res);

led_mem = request_mem_region(res->start, size, pdev->name);

if(led_mem == null)

gpfcon = ioremap(res->start, size);

gpfdat = ioremap(res->end, size);

return ret;

}static int led_remove(struct platform_device *pdev)

size = resource_size(res);

iounmap(gpfcon);

iounmap(gpfdat);

release_mem_region(res->start, size);

misc_deregister(&led_dev);

return 0;

}struct platform_driver led_driver = ,

};static int __init led_driver_init(void)

static void __exit led_driver_exit(void)

module_init(led_driver_init);

module_exit(led_driver_exit);

module_author("yhr");

module_license("gpl");

makefile:

ifeq ($(kernelrelease),)

# set your object kernel dir

kerneldir = /home/linux/linux-2.6.35

pwd := $(shell pwd)

modules:

$(make) -c $(kerneldir) m=$(pwd) modules

modules_install:

$(make) -c $(kerneldir) m=$(pwd) modules_install

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions module* modules*

.phony: modules modules_install clean

else

obj-m := led_device.o led_driver.o

endif

應用測試程式(led_test.c):

#include #include #include #include int main(void)

while(1);

return 0;

}

linux驅動之platform裝置驅動實驗

platform機制 把硬體相關的 固定的,如板子的網絡卡 中斷位址 和驅動 會根據程式作變動,如點哪乙個燈 分離開來,即要編寫兩個檔案 dev.c和drv.c platform裝置和platform驅動 platform會存在 sys bus 裡面,如下圖所示,platform目錄下會有兩個檔案,...

platform裝置驅動

platform bus是一種虛擬匯流排,作用就是將裝置資訊和驅動程式進行分離,platform bus會維護兩條線,一條是裝置,一條是驅動。當乙個裝置被註冊到匯流排上面的時候,匯流排會去搜尋對應的驅動,反之如果驅動被註冊到匯流排,匯流排也會去找對應的驅動。描述裝置資訊的方式有2種,一種是通過手動填...

Linux裝置驅動開發之Platform匯流排裝置

1.linux 裝置模型 裝置 device 裝置板級資訊描述 描述裝置硬體資訊,主要是裝置樹開發 驅動 driver 裝置驅動程式 不依賴板級資訊的裝置驅動程式 匯流排 bus 負責管理掛載對應匯流排的裝置以及驅動 常用platform 匯流排 spi匯流排 i2c匯流排,負責裝置和驅動的匹配 類...