日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux驅(qū)動開發(fā):簡易框架使用指南(linux驅(qū)動使用)

隨著智能終端及物聯(lián)網(wǎng)設(shè)備的普及,越來越多的軟件和硬件基于linux環(huán)境進行開發(fā)。特別是在涉及外設(shè)設(shè)備及固件開發(fā)時,編寫兼容Linux的底層驅(qū)動是必不可少的環(huán)節(jié)。本文的目的旨在介紹如何編寫一個簡單的驅(qū)動框架。

創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計、網(wǎng)站制作,集網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文推廣等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計,讓網(wǎng)站在運行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。

首先,我們來分析一下Linux驅(qū)動的結(jié)構(gòu)。大多數(shù)Linux驅(qū)動都具有類似的結(jié)構(gòu),具體可以分解為:頭文件、數(shù)據(jù)結(jié)構(gòu)定義以及驅(qū)動函數(shù)。

從數(shù)據(jù)結(jié)構(gòu)定義開始,我們要定義驅(qū)動和外設(shè)訪問所需要的相關(guān)變量,有下面三個數(shù)據(jù)結(jié)構(gòu):

1.設(shè)備對象:

struct MY_dev{
//設(shè)備號
int devno;
//設(shè)備名
char dev_name[32];
//API接口定義
struct my_dev_operations *ops;
//設(shè)備私有數(shù)據(jù)
void *priv;
};

2.設(shè)備操作:

struct my_dev_operations {
int (*open)(struct my_dev* dev);
int (*close)(struct my_dev* dev);
int (*ioctl)(struct my_dev* dev);
int (*read)(struct my_dev* dev, int *buf);
int (*write)(struct my_dev* dev, int *buf);
};

3.字符設(shè)備:

struct my_dev_char{
struct cdev cdev;
int buf[64];
//......
};

然后,要定義相應(yīng)的驅(qū)動函數(shù),比如open函數(shù)。該函數(shù)用于將設(shè)備驅(qū)動注冊到系統(tǒng)并生成一個對應(yīng)的設(shè)備對象,然后將該對象綁定到相應(yīng)的設(shè)備號下:

int my_dev_open(struct inode* inode, struct file* filp)
{
//定義一個設(shè)備對象
struct my_dev *dev;

//分配一個設(shè)備號
int devno = get_devnumber();

//為設(shè)備對象分配內(nèi)存
dev = (struct my_dev*)kmalloc(sizeof(struct my_dev));

//為設(shè)備對象制定設(shè)備名
sprintf(dev->dev_name, “my_dev%04d”, devno);

//注冊字符設(shè)備
register_chrdev_region(MKDEV(devno, 0), 1, dev->dev_name);

//分配一個字符設(shè)備
struct my_dev_char *my_char_dev = (struct my_dev_char *) kmalloc(sizeof(struct my_dev_char), GFP_KERNEL);

//初始化字符設(shè)備
cdev_init(&my_char_dev->cdev, &my_dev_fops);

//將設(shè)備綁定到設(shè)備號下
cdev_add(&my_char_dev->cdev, MKDEV(devno, 0), 1);

//保存設(shè)備號
dev->devno = devno;

//將設(shè)備對象放入filp中
filp->private_data = dev;

return 0;
}

最后,在驅(qū)動入口函數(shù)中定義驅(qū)動的相關(guān)操作,注冊驅(qū)動并完成相應(yīng)的操作:

int __init my_dev_init(void)
{
int ret;

//注冊驅(qū)動
ret = register_chrdev(MY_DEV_MAJOR, MY_DEV_NAME, &my_dev_fops);
if(ret
{
printk(KERN_ERR "register Gec6818 nand stor err\n");
return ret;
}

//完成相應(yīng)的操作
//...

return 0;
}

經(jīng)過上面的操作,一個簡單的Linux驅(qū)動框架就被成功搭建起來了。通過上面的步驟,成功搭建了一個基本的驅(qū)動框架,可以更多地關(guān)注驅(qū)動程序的功能性。如此,一個穩(wěn)健的Linux驅(qū)動就可以在Linux系統(tǒng)上運行了。

成都網(wǎng)站設(shè)計制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設(shè)計,成都網(wǎng)站設(shè)計服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。


網(wǎng)站欄目:Linux驅(qū)動開發(fā):簡易框架使用指南(linux驅(qū)動使用)
URL分享:http://www.dlmjj.cn/article/cddgehs.html