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

產品分類

當前位置: 首頁 > 工業電子產品 > 其他電子產品 > 開發板,套件,編程器 > 開發板

類型分類:
科普知識
數據分類:
開發板

移植OpenWRT下的ART驅動程序

發布日期:2022-10-14 點擊率:45

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

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

1. 基于已有經驗,移植ART驅動程序必須指定相應的內核路徑與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. 出現error: unknown field 'ioctl' specified in initializer,此前在移植i.MX6 ART驅動程序時已經遇到過類似問題,在https://www.witimes.com/imx6-porting-art/一文中有介紹,修改modules/dk_func.c中dk_fops結構體中的ioctl為compat_ioctl,再次編譯未報出ioctl的錯誤。

3. 出現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目錄下出現了art.ko。

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

6. 使用artgui Load DUT,出現如下錯誤:

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

8. 查看高版本ART代碼modules/dk_func.c中的dk_fops結構體,如下

#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

發現其定義了一個新的ioctl,在內核版本高于2.6.31時生效。

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

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

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

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設計模板

推薦產品

更多
主站蜘蛛池模板: 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 双舌接地线-PC68数字式高阻计-ZC36|苏海百科 | 共享雨伞_共享童车_共享轮椅_共享陪护床-共享产品的领先者_有伞科技 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 铝扣板-铝方通-铝格栅-铝条扣板-铝单板幕墙-佳得利吊顶天花厂家 elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 卫浴散热器,卫浴暖气片,卫生间背篓暖气片,华圣格浴室暖气片 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 电磁流量计厂家_涡街流量计厂家_热式气体流量计-青天伟业仪器仪表有限公司 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 滁州高低温冲击试验箱厂家_安徽高低温试验箱价格|安徽希尔伯特 | 天然鹅卵石滤料厂家-锰砂滤料-石英砂滤料-巩义东枫净水 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 |