新聞中心
linux ARM 驅(qū)動開發(fā)是一門重要的技術(shù).ARM協(xié)處理器,是目前流行的可改變體系結(jié)構(gòu)的架構(gòu),其中的嵌入式應(yīng)用越來越多,對ARM的開發(fā)者需求也越來越多。隨著嵌入式系統(tǒng)開發(fā)手段不斷提高,ARM 驅(qū)動開發(fā)愈發(fā)重要。

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比中衛(wèi)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式中衛(wèi)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋中衛(wèi)地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
學(xué)習(xí)與開發(fā)linux arm 驅(qū)動開發(fā)關(guān)鍵學(xué)習(xí)內(nèi)容涉及進程間通信(IPC),中斷管理,多線程編程,內(nèi)存管理等。同時,需要了解操作系統(tǒng)調(diào)度,權(quán)限管理,安“全即支持,硬件密集型編程,核心調(diào)度,中斷等相關(guān)內(nèi)容。
開發(fā)Linux ARM 驅(qū)動可以分為以下幾個步驟:
1、熟悉ARM處理器和操作系統(tǒng)體系結(jié)構(gòu)。
2、完成初步調(diào)試環(huán)境配置,并熟悉調(diào)試工具及操作系統(tǒng)使用方法;
3、分析要實現(xiàn)的設(shè)備驅(qū)動功能;
4、編寫設(shè)備驅(qū)動層代碼,完成底層的硬件控制;
5、創(chuàng)建sys的設(shè)備節(jié)點,實現(xiàn)驅(qū)動的入口函數(shù);
6、寫驅(qū)動文件完成驅(qū)動模塊的編譯;
7、編寫測試用例,將驅(qū)動模塊移植到硬件環(huán)境中;
8、在硬件環(huán)境中進行模塊的完整性測試。
如下為一個Linux ARM 驅(qū)動的C語言代碼:
#include /* 為模塊初始化注冊提供頭文件 */
#include /* 將內(nèi)核特性常量和類型說明到定義 */
#include /* 將__u8, __u32等類型包含在內(nèi) */
#include /* MKDEV等宏定義 */
#include /* register_chrdev_region等函數(shù)原型及常量 */
#include /* class_create等函數(shù)原型*/
#include /* cdev結(jié)構(gòu)等函數(shù)原型*/
#include /* copy_from_user等函數(shù)的原型 */
/***定義設(shè)備的主設(shè)備號與次設(shè)備號*/
static int major;
static int minor = 0;
static dev_t devno;
static struct cdev cdev; /*cdev結(jié)構(gòu)體*/
/***定義設(shè)備類*/
static struct class *cls;
ssize_t hello_read(struct file *filp, char __user *buf, size_t count, loff_t *offset)
{
printk("Hello driver read\n");
return 0;
}
ssize_t hello_write(struct file *filp, const char __user *buf, size_t count, loff_t *offset)
{
printk("Hello driver write\n");
return 0;
}
/* 代表一組函數(shù)的指針,每個函數(shù)對應(yīng)設(shè)備的每個操作,建立設(shè)備操作和函數(shù)之間的連接 */
static struct file_operations hello_ops =
{
.owner = THIS_MODULE,
.read = hello_read,
.write = hello_write,
};
static int __init hello_init(void)
{
int ret;
/* 申請設(shè)備號*/
if(major)
{ /*通過指定設(shè)備號申請*/
devno = MKDEV(major,minor);
ret = register_chrdev_region(devno, 1, "hello_drv");
}else
{ /*自動申請*/
ret = alloc_chrdev_region(&devno, 0, 1, "hello_drv");
}
/* 申請失敗*/
if (ret
{
printk("register_chrdev_region request failed!\n");
}
//在/sys/class/下創(chuàng)建設(shè)備類別目錄hello_drv
cls = class_create(THIS_MODULE, "hello_drv");
//mdev-讓設(shè)備自動創(chuàng)建設(shè)備節(jié)點
device_create(cls, NULL, devno, NULL, "hello");
//初始化cdev結(jié)構(gòu)
cdev_init(&cdev, &hello_ops);
//向系統(tǒng)添加一個cdev
cdev_add(&cdev, devno, 1);
printk("hello_init\n");
return 0;
}
static void __exit hello_exit(void)
{
//刪除cdev
cdev_del(&cdev);
/*銷毀設(shè)備節(jié)點和設(shè)備類別*/
device_destroy(cls, devno);
class_destroy(cls);
/*釋放設(shè)備號*/
unregister_chrdev_region(devno, 1);
printk("hello_exit\n");
}
//宏把這些函數(shù)的指針分別對應(yīng)到Linux中
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢:028-86922220。
本文名稱:開發(fā)LinuxARM驅(qū)動開發(fā)實戰(zhàn)經(jīng)驗(linuxarm驅(qū)動)
當前鏈接:http://m.5511xx.com/article/cdhcsge.html


咨詢
建站咨詢
