新聞中心
linux驅(qū)動開發(fā)是把軟件專家?guī)氲讓佑布_發(fā)的不可缺少的部分,熟悉這些技術(shù)能夠解決各種軟件與硬件的對接問題,增加開發(fā)的效率。

Linux的驅(qū)動開發(fā)包含的方面包括入口、退出、模塊、權(quán)限、文件系統(tǒng)、內(nèi)核態(tài)和用戶態(tài)、進程管理、軟中斷處理、設(shè)備控制等。Linux驅(qū)動開發(fā)面臨的技術(shù)問題有很多,這些技術(shù)是Linux驅(qū)動開發(fā)的關(guān)鍵,把這些技術(shù)掌握良好,能讓開發(fā)者更有效率的對硬件進行開發(fā)。
首先要學(xué)習(xí)Linux驅(qū)動USB開發(fā),usb驅(qū)動開發(fā)是連接usb設(shè)備和操作系統(tǒng)的重要內(nèi)容,有了這部分內(nèi)容,驅(qū)動開發(fā)者就能使用usb硬件,其中包括枚舉設(shè)備、申請設(shè)備并返回設(shè)備回調(diào)函數(shù),然后手動添加每個設(shè)備的設(shè)備文件夾到sysfs文件系統(tǒng)中,然后釋放內(nèi)存和資源等等。示例代碼如下:
int init_module(void)
{
int result;
dev_t dev = MKDEV(my_major, 0);
/* Register your major, and accept a dynamic number */
result = register_chrdev_region(dev, 0, 1, "usbdevice");
if (result
printk(KERN_INFO "cannot obtain major number %d\n", my_major);
return result;
}
/* allocate the devices */
registered_usb_device = kmalloc(sizeof(struct usb_dev_info), GFP_KERNEL);
if (!registered_usb_device) {
printk ("cannot allocate memory\n");
result = -ENOMEM;
goto fail_malloc ;
}
memset(registered_usb_device, 0, sizeof(struct usb_dev_info));
/* link the file operations with the cdev */
cdev_init(®istered_usb_device->cdev, &usb_fops);
registered_usb_device->cdev.owner = THIS_MODULE;
/* connect the major/minor number to the cdev */
result = cdev_add(®istered_usb_device->cdev, dev, 1);
return 0;
fail_malloc:
unregister_chrdev_region(dev, 1);
return result;
}
內(nèi)核態(tài)是指 Linux 驅(qū)動器接入系統(tǒng)的底層,其中包含各種設(shè)備的硬件及其相關(guān)驅(qū)動程序,包括網(wǎng)卡、硬件磁盤驅(qū)動器。開發(fā)者要完成的任務(wù)涵蓋初始化、中斷處理、定時處理、設(shè)備工作流程等,而這些任務(wù)通常都要使用系統(tǒng)調(diào)用來完成。示例代碼如下:
#include
#include
#include
/* 中斷處理程序 */
irqreturn_t my_interrupt_handler(int irq, void *dev_id)
{
/* 中斷處理的代碼 */
return IRQ_HANDLED;
}
int my_driver_init(void)
{
int retval;
/* 中斷分配,在此處填寫設(shè)備的中斷號 */
retval = request_irq(5, my_interrupt_handler,
0, "my_driver", NULL);
if (retval) {
printk(KERN_ERR "Error in registering interrupt handler\n");
return -EBUSY;
}
/* 其他中斷分配和處理 */
/* 如果沒有請求任何中斷,則返回0 */
return 0;
}
設(shè)備控制是指Linux驅(qū)動開發(fā)中使用恰當(dāng)?shù)挠布僮骺刂朴布_@些硬件通常是PCI設(shè)備、DMA配置等,處理和讀寫硬件信息。Linux的設(shè)備控制有IO設(shè)備驅(qū)動程序、PCI驅(qū)動程序、DMA等,通常采用硬件驅(qū)動程序模型開發(fā),核心是處理硬件的I/O操作。示例代碼如下:
#include
void *base_address;
int init_module( void )
{
base_address = ioremap( 0x48000000, 0x1000 );
if (!base_address)
goto exit;
// Device registers can be accessed as below
iowrite32(value, (char *) base_address + offset);
value = ioread32( (char *) base_address + offset);
exit:
return 0;
}
void cleanup_module( void )
{
iounmap(base_address);
}
Linux驅(qū)動開發(fā)是一門很復(fù)雜的技術(shù),在Linux系統(tǒng)底層工作需要一定的時間、資源和經(jīng)驗,只有把這些技術(shù)掌握良好,開發(fā)者才能有效的解決軟件
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽、重慶、貴陽機房服務(wù)器托管租用。
當(dāng)前標題:Linux驅(qū)動開發(fā):掌握技術(shù)的奧秘(linux 驅(qū)動開發(fā)工具)
網(wǎng)頁地址:http://www.5511xx.com/article/coiseeh.html


咨詢
建站咨詢
