环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產(chǎn)品分類

當(dāng)前位置: 首頁 > 工業(yè)電子產(chǎn)品 > 其他電子產(chǎn)品 > 開發(fā)板,套件,編程器 > 開發(fā)板

類型分類:
科普知識
數(shù)據(jù)分類:
開發(fā)板

移植OpenWRT下的ART驅(qū)動程序

發(fā)布日期:2022-10-14 點擊率:46

For English speaking readers, please visit: https://www.witimes.com/openwrt-porting-art-en/

相信本站的大部分讀者都知道OpenWRT與ART:OpenWRT是一款基于Linux的開源無線路由器系統(tǒng),目前廣泛應(yīng)用于很多廠商的無線設(shè)備;ART是Atheros Radio Test的簡寫,用于測試各種基于Qualcomm Atheros芯片設(shè)備的射頻指標(biāo)。近期有朋友尋求OpenWRT中的ART驅(qū)動程序, 筆者費(fèi)了九牛二虎之力終于將其搞定,在此做簡要總結(jié),以便后續(xù)查閱。

1. 基于已有經(jīng)驗,移植ART驅(qū)動程序必須指定相應(yīng)的內(nèi)核路徑與Toolchain路徑,修改makefile.artmod如下

KDIR := /home/tom/openwrt/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.18.7

PWD := $(shell pwd)

ROOTDIR := $(PWD)/modules

# Default architecture is MIPS

ARC :=mips

CROSS_CC :=/home/tom/openwrt/trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-uclibc-

2. 未作任何代碼的更改情況下,開始編譯。

3. 出現(xiàn)error: unknown field 'ioctl' specified in initializer,此前在移植i.MX6 ART驅(qū)動程序時已經(jīng)遇到過類似問題,在https://www.witimes.com/imx6-porting-art/一文中有介紹,修改modules/dk_func.c中dk_fops結(jié)構(gòu)體中的ioctl為compat_ioctl,再次編譯未報出ioctl的錯誤。

3. 出現(xiàn)error: 'SPIN_LOCK_UNLOCKED' undeclared here (not in a function),修改modules/dk_event.c中的

spinlock_t driver_lock = SPIN_LOCK_UNLOCKED;

DEFINE_SPINLOCK(driver_lock);

4. 再次編譯,順利通過,在modules目錄下出現(xiàn)了art.ko。

5. 將art.ko上傳至web服務(wù)器,并使用wget命令下載至DUT中,并使用insmod art.ko命令插入內(nèi)核模塊并運(yùn)行nart.out,未出現(xiàn)任何異常。

6. 使用artgui Load DUT,出現(xiàn)如下錯誤:

deviceInit devIndex=0 device_fn=0 pdkInfo=0

Opening device /dev/dk0

Error: get version ioctl failed !

< 6006 ERROR Anwi driver load error.

< 7502 CONTROL OFF

< 7504 INFO |set|devid||

< 7504 INFO |set|mac||

< 7504 INFO |set|customer||

< 7506 CONTROL DONE load devid=-1; caldata=auto;

截圖如下

ioctl-Error

7. 又出現(xiàn)了可怕的錯誤“Error: get version ioctl failed !”,這個錯誤曾在我移植i.MX6 ART驅(qū)動程序時折磨了我很多天,同樣記錄在https://www.witimes.com/imx6-porting-art/一文中,當(dāng)時更換為高版本ART后問題得到解決,然而這一次我采用同樣方法卻完全不奏效。既然無法避開,那就正面面對,徹查此問題。

8. 查看高版本ART代碼modules/dk_func.c中的dk_fops結(jié)構(gòu)體,如下

#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31)
static long dk_ioctl_new(struct file *file, unsigned int cmd, unsigned long arg)
{
        struct inode *inode = file->f_path.dentry->d_inode;
        long ret;
        ret = dk_ioctl(inode, file, cmd, arg);
        return ret;
}
#endif

發(fā)現(xiàn)其定義了一個新的ioctl,在內(nèi)核版本高于2.6.31時生效。

9. 此處引用自:http://blog.csdn.net/cbl709/article/details/7295772

今天調(diào)一個程序調(diào)了半天,發(fā)現(xiàn)應(yīng)用程序的ioctl的cmd參數(shù)傳送到驅(qū)動程序的ioctl發(fā)生改變。而根據(jù)《Linux設(shè)備驅(qū)動》這個cmd應(yīng)該是不變的。因為在Kernel 2.6.36 中已經(jīng)完全刪除了struct file_operations 中的ioctl 函數(shù)指針,取而代之的是unlocked_ioctl ,所以我懷疑二者是不是兼容的。上網(wǎng)查了一些資料,很多文章只是泛泛談了一下,說在應(yīng)用程序中ioctl是兼容的,不必變化。而在驅(qū)動程序中這個指針函數(shù)變了之后最大的影響是參數(shù)中少了inode ,所以應(yīng)用程序ioctl是兼容的,但驅(qū)動程序中我們的ioctl函數(shù)必須變化,否則就會發(fā)生cmd參數(shù)的變化。

10. 仿照這段代碼,將低版本ART代碼modules/dk_func.c中的dk_fops結(jié)構(gòu)體作出修改,如下

static long dk_ioctl_new(struct file *file, unsigned int cmd, unsigned long arg)
{
        struct inode *inode = file->f_path.dentry->d_inode;
        long ret;
        ret = dk_ioctl(inode, file, cmd, arg);
        return ret;
}

static struct file_operations dk_fops = {
        owner:  THIS_MODULE,
        open:   dk_open,
        release: dk_release,
        mmap:   dk_mmap,
	unlocked_ioctl: dk_ioctl_new
};

11. 再次編譯,下載至DUT,并使用artgui Load DUT,一切正常。

Final-OK

下一篇: PLC、DCS、FCS三大控

上一篇: Allegro PCB設(shè)計模板

推薦產(chǎn)品

更多
主站蜘蛛池模板: 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 吨袋包装机|吨包秤|吨包机|集装袋包装机-烟台华恩科技 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 圈酒招商网【jiushuitv.com】_酒水招商_代理_加盟平台 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 浙江自考_浙江自学考试网| 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 | Win10系统下载_32位/64位系统/专业版/纯净版下载 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 苏州同创电子有限公司 - 四探针测试仪源头厂家 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 双吸泵,双吸泵厂家,OS双吸泵-山东博二泵业有限公司 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 作文导航网_作文之家_满分作文_优秀作文_作文大全_作文素材_最新作文分享发布平台 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 桨叶搅拌机_螺旋挤压/方盒旋切造粒机厂家-无锡市鸿诚输送机械有限公司 | 吉林污水处理公司,长春工业污水处理设备,净水设备-长春易洁环保科技有限公司 | 中控室大屏幕-上海亿基自动化控制系统工程有限公司 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 解放卡车|出口|济南重汽|报价大全|山东三维商贸有限公司 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] | 无锡门窗-系统门窗-阳光房-封阳台-断桥铝门窗厂[窗致美] |