补充嵌入式后期的开发~~分享一下自己的嵌入式学习经验~~也纪念一下即将逝去的青春

自己的嵌入式学习经验~~也纪念一下即将逝去的青春

大一听说嵌入式很有挑战性,菜鸟也想挑战一下下,就开始了我的学习之旅,但是后来发现上了操作系统的arm完全没有自己想象的那么简单,简单的led程序都不会写,不要说不会写,往哪里写,在哪里写,写什么都不知道,现在才知道嵌入式开发是软硬件结合最完美的体现了!!写这篇文章是为了给想学嵌入式的孩儿们抛个砖头~~另外自己留个纪念,以后回忆一下也不会觉得空虚寂寞冷连!错误百出莫怪,仅做参考,少走弯路,额也是一点点走过来的,再次申明,现在我只是一只老菜鸟,浮于表面的那种,想要研究透彻得花时间,三个月肯定不够。

 

     引用一下最后的几段文字:   偶然看到文章?不对,坚持,早晚会看到这些资料的!!一点点积累,一点点收获,没有更多的人教自己,只有自己学习,自己探索,坚持就会有收获,就是这样的~现在我已经写了三个IO口驱动,成功加载到了linxu3.0.1内核,在dev目录下有了我的驱动哦,已经测试通过啦!能在用户空间直接对6410进行IO口操作,编写了流水灯测试程序,封装了驱动中的io口操作函数!接下来的工作就是学会操作系统下驱动的中断机制定时器的用法,然后完全用单片机的思想去编程做项目了……

      到这里我才知道arm嵌入式的厉害,操作系统下有好多可用的c类函数,像延时函数,休眠函数,这些延时拿到单片机编程的领域,我们要记载时钟运行步数,然后根据主频去计算,有点麻烦,但是在操作系统下我们包含了头文件后可以直接调用啊!这是系统编程的一大优越性,像可以用usleep()函数去延时,这种延时本质是休眠,还不会阻塞cpu,还能达到我们的目的!很有效率。因为我们在系统下是可以有好多进程同时运行的!这些是可以宏观并行的!!就像我们的电脑一样!说句很片面的话,写出了几个驱动程序后,看到了arm这类体系的强大后,感觉6410这种arm级的芯片已经能秒杀单片机了,操作系统有很多优越性,网络服务,图形界面等等,还有很多很多我这只菜鸟不知道的!!!

    加了系统,会了简单的驱动编写,对于现阶段大学的我们来说,已经足够了,想要完全做明白嵌入式,要花时间!

    这对于一些简单的项目已经够用了,像可以用几个io口同时控制各种传感器,传感器基本上都自带ad,只需要软件模拟各种通讯协议罢了,所以有了io口就行,像温度,湿度,光强,重力加速度,以后我会编写这些模块的驱动程序,还可以与无线连用,和其他的控制类单片机通讯,做个智能家居系统,加上gprs,发个短信就可以打开自己家的电灯等设备,用boa服务器,通过网络控制模块,我还想调一下摄像头模块,wifi模块,有时间再说吧。

      有了驱动,有了系统,人机交互界面捏?我们就不用12864这种显示了,6410的驱动能力,10寸的TFT屏也没问题,只需改一下参数就行了,就是我在帖子里的那个bsp模板的lcd平台数据结构体!然后QT自然就会被我们想到,我学习qt才两三天,现在还没有入门,也不好说些舍呢么,只是感觉应该比windows下的VC简单,自学了VC也有两个多星期了,没白学啊,可以类推到Qt编程上。学会了qt后就可以自己做一些用户界面,有时间再学一下把。编好了之后应该到rcS下加上一个开机运行就行了!我们可以点击触摸屏来控制各种设备,各种模块喽。这几天感觉整个世界都是由C ,C++等机器语言构成的#¥%…………&

     经过长达三个多月的嵌入式学习,现在终于有了一定的开发经验。记录一下,当做纪念了。

     记得去年寒假的时候就开始学习嵌入式了,开发平台是三星公司的s3c6410芯片,arm11体系的。但毕竟能力有限,即使有半年单片机的学习经验,也感觉入门很难,当时只能跟着视频走,但还是云里雾里……并且大家可以看一下,几乎每个人做的视频开头都会说嵌入式多难多难,但是只要能坚持,还是可以学会的!

现在终于从菜菜鸟变成大菜鸟了,分享一下学习心得!

     ①学习嵌入式最开始的拦路虎是arm linux 交叉平台 开发环境的搭建,就像不同的体系平台要用不同的编译器一样,完全搭建起开发环境对于一个新手来说很困难,难在神马都不知道!!!我花了两个多星期去搭建开发环境,各种查资料,各种网上搜软件,各种破解,各种问题,但最后都一一解决了。基本的流程是这样的:首先说,所有用到的软件都可以到网上去下载 ,度娘、GG就会解决,只是要花费一段时间。首先安装Vmware虚拟机,安装低版本的好点儿,兼容性好。我用的是6.0的,然后在虚拟机上装好linux系统,若是电脑内存可以的话,最好装几个不同版本的linux系统,因为后期的内核编译会因不同的linux系统环境而出现不同的问题和错误。我在后期编译中就遇到过在redhat5上内核编译报错,无法完成内核的编译,但在企业版5上就ok的问题,这个问题废了我两三天时间。然后一定要在虚拟机上安装XP系统,因为三星公司的mini USB驱动是不支持win7的,因为这个折腾了三四天。我安装的是ghostXP,装这个XP也花了我两天时间,主要问题是磁盘分区问题,非常难分,因为没有安装windows操作系统的经验,最后一篇文章解决了这个问题,终于把XP装到了虚拟机上,找个新版本的安装,旧版本的搜狗都没有,新版本的用着方便,经测试,兼容性也没有问题。安装好后,我的环境是这样的,调试裸机在XP下,烧写uboot,内核,根文件也在XP下,用linxu做各种编译,连接linux和win7的是vmwaretools工具的share文件夹功能,我还用了samba服务器,不过爽了两天网络就出现问题了,这样三个系统之间就能互传数据,毫无阻碍了。

    然后在XP上安装裸机开发环境,像codewarrior for rvds,超级终端dnw,jlink,sd_writer ,axd debugger等等,这些都是调试裸机程序的,裸机调试不是必须的,我花了两个多星期,看完了s3c6410的用户手册,看完了库函数,调试了大多数的库函数,基本上知道了6410的功能配置,但对于一款arm11体系的芯片,底层的函数,即使是裸机,像3D,各种音频视频编解码器我想大多数人也写不出来,所以像那些视频音频处理部分只要知道基本的配置就行了,但是那些单片机有的模块,就是我们熟悉的模块,像通讯的IIC,UART,SPI啊,还有控制的PWM,ADC,RTC等等还是要好好调一下的,这样在以后的驱动学习中你就可以写自己的驱动,在操作系统下把arm当普通的单片机用了!!!你如果是单片机编程大神,就没有必要看了,到时候对着芯片手册找寄存器就行了,不是真正的大神的话还是要实际的调试一下!后边的驱动编写还是要用的。

    ②裸机结束后,接下来就是linux系统基本知识的学习了。首先要将linux系统下所有常用指令烂记于心,因为所有的操作都是在无图形终端下进行的,说白了就像windows下的dos。像copy啊,改文件名,压缩文件啊,文件打包啊,进入文件夹等等都要写指令来操作,不是简单的动动鼠标就行了!这东西背是背不过的,要动手敲,自己天天敲,不用背就记住了,和学自行车一样,只看书不动手白搭!这一环节非常重要,这是后面一系列移植的基础,不然你即使有资料,也看不懂!列举几个比较重要的:


tar -zcvf 打包后生成的文件名全路径 要打包的目录,

修改整个路径的权限 chmod -R 777 文件夹名字 

vi中删除多行 N dd  撤销是u   /字符 就会查找相应的字符   n会找到下一   

find -name 想要找的文件名称  查找某个文件路径

改名字 mv  1  2

用户切换su  root

cp -f 是不询问直接删除路径下的已经存在的文件 -r 是复制文件夹用的

ll命令查看设备的情况 如:设备号 设备类型

安装程序./config  make   make install

./main   执行函数  不加空格ls  -a 显示隐藏的文件

ls -l   显示文件的详细信息

pwd 显示当前工作目录的绝对路径

Rm -rf 这个命令千万千万不用乱用,在制作根文件系统时,我不小心把根文件系统全都删掉了,只能再来一次,一天时间又没有了。

    ③接下来要了解linux系统的运行机制了,就是好多视频上叨叨来叨叨去的那些linux的灵魂。我看了好多,还是不能理解,这些涉及到链表啊等数据结构,貌似很复杂,我们也不用完全弄明白,还有一些自旋锁啊,信号量啊,互斥,内核空间与用户空间什么的,这是驱动部分的,虽然看了好多文章,现在还不是很明白,因为真正用到的很少,用到了也是照葫芦画瓢,想要弄明白就要去分析内核底层代码了,我尝试了一下,感觉太费时间,所以只能用到什么机制再研究什么了,后期我在misc设备驱动中用到了信号量,防止一个驱动被多个进程调用而产生冲突,因为驱动编程我才起步,所以有待进一步研究。这些东西都很抽象,也许不是计算机专业的,所以理解起来有点儿麻烦,建议大家用到什么学什么,操作系统这一块没必要全都弄明白,不行逮个软件工程学院的来指点一下也行~~嘻嘻

    ④看完了裸机,看完了linux系统运行机制,接下来我是直接分析了内核驱动代码部分,这一部分的学习异常艰辛。我天天在内核代码里游泳,感觉进步很慢,但是现在想来,要是没有那两个星期的研究,哪能有现在这么多的灵感,懵出了好多想法,所以说研究内核代码还是有用的。我找到一部分代码就到网上去查找资料,因为后来才知道自己分析半天不如到网上去找相应的函数,吃人家啃过的东西也好,节约时间,我们也学会了知识,这样才是正解。但是通过啃内核代码也没搞明白驱动到底咋么写。只能转到了移植那一部分了,看着论坛上成千上万的资料,都不知道哪些适合自己的开发板,尝试了一下制作根文件系统,失败,自己加入驱动,编译内核,失败,uboot压根就没敢动!因为看到有人说不要动,用公司做好的就行,我只是把源代码删掉了一部分,就是把与arm体系无关的删掉了,自己编译生成了uboot,之后就期末考试了,也就放弃了嵌入式学习。

     ⑤暑假开始后,我不想就这样放弃了,累计学了有两个月了,竟然连led都点不亮!想想就觉得可惜了,不能半途而废啊!调了飞思卡尔后觉得自己没有白学这两个月,整体的编程思想,编程方法都提升了好多,6410几万几万行的库函数还有内核代码不是白看的!调完了DSP C2000,做完了测量测控比赛后,后我买了一本吼吼的嵌入式驱动编程的书,啃了三天后,又开始了我的嵌入式学习!

     开始在red hat5上编译以前编译过的内核,无论怎样修改配置,编译都出错,百度了两天毫无结果,以致差点儿又放弃了学习,最后看到有人说也许是环境配置造成的,灵光就来了,发现我之前的编译工作都在企业版5 系统上做的,原来用错了系统!换为企业版5后,make menuconfig ~~内核经过简单配置就ok了,毕竟用的是飞凌的,没有自己加s3c6410的一点儿驱动,一大遗憾啊,有时间再做吧。

    ⑤之后开始用busybox建立自己的根文件系统,配置好了各个初始化文件,加了两个节点设备,copy了busybox所生成的文件到根目录下,添加了相应交叉编译器的so共享库,就是这一步!!多添加了一个库,导致了tslib移植失败,花费了两天时间,但也学到了好多,在相应的文件夹下添加相应的文件,修改几个重要的文件,etc目录下的profile,init.d下的rcs等等,rcs是linux内核加载根文件系统后最先运行的文件,里面挂载了许多设备,有的命令其实是busybox已经做好的,像mount -a等,在这里面可以加上我们的shell脚本  就是以   文件名 ﹠的形式写在里面就行, ﹠代表什么记不清楚了,也许是后台运行吧。相应的文件需要放在usr ,bin目录下(这里就是后期我编写的各种测试函数所存放的位置),这个目录的环境变量要写在profile里,这样才能找到相应的shell文件,还有好多文件具体的看论坛等资料,还有一个文件的名字可以改为自己的名字,这样终端上命令操作符前就带有自己的名字了,我的是jack sun~~最后用2g的mkyas。。工具制作我们自己的根文件系统镜像文件,mk。。。    自己root文件路径   ./镜像名称.bin  下载uboot,后将我们的根文件镜像下载到开发板上,若出现操作符就说明成功加载了,具体看终端printf的信息。 
     ⑥ 接下来修改开机画面,logo,先用美图秀秀把媳妇的照片改成  480 *272 这是我的lcd屏幕分辨率,然后到red hat 5系统上用类似的ps工具修改为224色,保存为arm_linux_clut224.ppm ,替换掉内核源代码 driver,video,logo目录下的那个同名文件, 再进行内核配置,找到logo配置,应该是在驱动,图形,配置里面吧,开启224那个就ok了,还要开启外层的两个配置,结果成功了,媳妇的照片在加载内核的时候出现了,但是有问题,加载的媳妇的照片在lcd的一侧,不是满屏,当时不知道怎么回事,就先这样了。
      ⑦接下来移植madplay音乐播放器到我的空空的根文件系统中, 安装了好多包包,为了给madplay打补丁吧,编译后生成了madplay的可执行文件,放到根文件usr bin下,再次蛋疼的烧写uboot,内核,根文件,每次加起来都5min,蛋疼,谁让我ping不通开发板和电脑呢!!找了个dj,要mp3格式的,在终端运行madplay  + 音乐文件所在路径   结果终端显示正在播放,插上耳机,开发板没声音!度了两个小时的娘和gg毫无结果,拿起驱动的书籍就啃6410音频驱动代码那部分,终于知道了这个音频驱动所用的芯片,了解了他的机制,然后知道了原来他有放音和录音功能,默认的没有开启他用什么功能,加了一段初始化代码到了内核代码 samsung目录下的一个c文件中,然后蛋疼下载,我和我的小伙伴震惊脸!耳机里竟然响起了动听的音乐,音质如此的棒!!这错误找了有6,7个小时吧,累啊,但最后成功了!其实吧,总感觉坚持就会胜利,的确! 
    ⑧接下来移植tslib和qt库和tslib,蛋疼啊,一做就是两天啊啊!先是移植tslib屏幕校正程序,触摸屏的嵌入式图形界面的应用程序QT都要依赖etc下的pointercal 文件来运行。错误一,ts校正程序只在屏幕上显示了一半,终端打印屏幕分辨率为800*480,明显不对,但是内核跑飞凌的根文件系统没问题,也没出现这个分辨率不对的问题,很无解,开始度娘,gg,又几个小时了没结果!!决定从终端printf信息入手,这是调试内核的好方法,找到打印的句子,死啃tslib源代码,找到了错误打印的那部分代码,找到了xres和yres,之后顺藤摸瓜,找传参的结构体,一个套一个,最后到了内核源代码,又找了半天,终于揪出了lcd的分辨率设置实参在什么地方!原来就在bsp中,,lcd数据平台,早就该想到的。。。改了这个结构体后,屏幕一切ok了,其实这一找,半天又没了,感觉在操作系统的源代码里看函数还是很吃力的,虽然6410的裸机库函数用两个星期都看了一遍,但是对操作系统的机制了解还是少了点儿,学过的mcu,dsp编程都没法和他比!本来就是针对不同领域的。lcd分辨率,在实体框中显示大小(这个就是那四个参数,经过验证了已经!)搞定后,tslib出现了新的问题,问题二,无法识别设备,最后试出来了是用dev下的event2设备,后来才知道有个方法,就是cat   dev/eventx 来试一下触摸屏有没有反应就知道tslib的环境变量到底怎么设了,cat  还有一个什么来,就是读取,写入某个设备驱动吧,还有文件什么的,没有细究,改天gg一下。问题三,要命啊。这个问题,就是无法生成pointercal文件,那时候我的根文件竟然200多m了!!我全然不知道这有多危险,看过nand flash的分区,是207m,但是我是2g的nand啊,所以也没注意,直到百度,gg了一天啊正正一天啊!把所有的帖子都看完了也没有解决这个问题,最后自己静下心来想了一下,觉得可能是这个根文件太大了,裁剪了后果然ok了,太大,导致除了tmp外的所有文件无法操作,无法分配内存!哎,还好学会了很多东西,像自己写了一shell脚本,对文件进行操作,还有linux文件的权限,都学了个遍,知道还有隐藏权限问题,默认权限等等,多加的那一个lib库竟然150多m!!下了我一跳,最后测试出来了,我烧写了30多次!!试过了无数的另类方法,最后快疯了,找出了这个错误的原因后我没有那么高兴了,哎,其实百度gg也不是万能的,有些东西感觉还得靠灵感和思考。最后qt的hellow word正常运行,tslib校正程序也能正常工作饿了,pointercal啊也能正常出现在etc下了啊!本来配置就没错,都是我的疏忽,把多余的库加进来了!!应用程序用什么库就加什么,贪多并不好!!现在根文件60m,好小好小哦,下载也快了,嘻嘻,明天移植qtopia4,有了这几天的错误积累经验和累计三个多月的嵌入式学习,我想应该没什么问题了吧,我把移植错误解决都发到飞凌嵌入式论坛上了。

      以上是摘录的。

      接着说一下Qtopia4的移植,就是手机平台的移植,因为qt啥的早被诺基亚收购了,有些东西做了很大的变动,有些源码都绝迹了,找了半天才找到一个新版本的,这东西差点儿害死我,配置了半天,执行./config后,等了一个小时后出现了错误,然后点了一下enter 傻眼了,我的root账户显示都没有了,这是怎么回事?我的好多文件都没有了!!!!不只是一般的文件!!!!!关机后开不开机了,我的整个linux系统都崩溃了,最后百度了半天,知道应该是我的系统配置文件都被删掉了!!就像是windows下的c盘被超级管理员删没了一样,这样的系统还能重启才怪啊!!!想要修复,一天过去了,没办法修复了弹尽粮绝啊!我之前做的所有的工作都白费了啊,所有的编译文件,配置文件,安装文件,都没有了,什么都没有了,后悔没有将文件都备份,光qt就编译了4个小时啊!我的时间啊!系统崩溃那一天我也接近崩溃了,以为我的所有的工作都没了。烧心了一天后突然想到!!!---》文件没了还有脑子啊!!我擦,还有win7下的资料啊,我决定重建系统,结果没想到我只花了两天时间就把系统恢复到了原来的样子,确切的说比原来还要好,文件更加体系化了,我又花了半天时间解决了win7和linux不能ping通的问题,成功开启了samba服务器,将所有的编译文件,安装文件,配置文件,源码都复制到了win7下,但是这样没有效率,告诉大家一个不用开启samba就能安全导出编译文件的方法,就是打包压缩,这样还解决了文件权限的问题哦!早该想到的啊!经过这次系统重建后,感觉自己把之前做所有工作都熟悉了一遍,真没想到能够这么快就搭建完!!不是一般的菜菜鸟了,是大菜鸟了。最后我的根文件系统恢复如初,我还得到了一手的编译资料,即使系统再次崩溃,我可以让她在一个小时内恢复如初!咳咳!

 

⑨之后查了半天的qtopia移植资料,发现我现在没有必要移植她,用到的都是qt库,用手机平台干嘛?所以就不移植了,还是有点怕把我的系统搞乱了。想了一下,上次系统文件被删光的可能原因,一是qtopia的shell里有一些错误的删除命令,二是我的系统空间不足。

    10,移植做了这么长时间,其实也是搭建开发平台,为后面的驱动编写打基础,有了自己的根文件系统,一切都是自己说的算了!我也不知道咋么的,突然在网上看到了驱动编写的一篇文章,恍然大悟,隐隐约约知道了自己的驱动怎样写了!!!!晚上兴奋的睡不着!!虽然我看了两个多星期的内核驱动结构,但是这些源代码我压根就没看到过!就是在driver char 下的文件,这是飞凌公司加的驱动源代码,有经验的孩们就知道接下来怎么做了!!!!!哎,积累就是如此,我若开始看到这些源代码也不会知道这意味着什么,有了一定的经验才会知道的。

    11,偶然看到文章?不对,坚持,早晚会看到这些资料的!!一点点积累,一点点收获,没有更多的人教自己,只有自己学习,自己探索,坚持就会有收获,就是这样的~现在我已经写了三个IO口驱动,成功加载到了linxu3.0.1内核,在dev目录下有了我的驱动哦,已经测试通过啦!能在用户空间直接对6410进行IO口操作,编写了流水灯测试程序,封装了驱动中的io口操作函数!接下来的工作就是学会操作系统下驱动的中断机制和定时器的用法,然后完全用单片机的思想去编程了……

     12,到这里我才知道arm的厉害,操作系统下有好多可用的c类函数,像延时函数,休眠函数,这些延时拿到单片机编程的领域,我们要记载时钟运行步数,然后根据主频去计算,有点麻烦,但是在操作系统下我们包含了头文件后可以直接调用啊!这是系统编程的一大优越性,列如可以用usleep()函数去延时,这种延时本质是休眠,还不会阻塞cpu,还能达到我们的目的!很有效率。因为我们在系统下是可以有好多进程同时运行的!这些是可以宏观并行的!!就像我们的电脑一样!说句很片面的话,写出了几个驱动程序后,看到了arm这类体系的强大后,感觉6410这种arm级的芯片已经能秒杀单片机了,操作系统有很多优越性,网络服务,图形界面等等,还有很多很多我这只菜鸟不知道的!!!

     13,加了系统,会了简单的驱动编写,对于现阶段大学的我们来说,已经足够了,想要完全做明白嵌入式,要花时间!

     14,这对于一些简单的项目已经够用了,像可以用几个io口同时控制各种传感器,传感器基本上都自带ad,只需要软件模拟各种通讯协议罢了,所以有了io口就行,像温度,湿度,光强,重力加速度,以后我会编写这些模块的驱动程序,还可以与无线连用,和其他的控制类单片机通讯,做个智能家居系统,加上gprs,发个短信就可以打开自己家的电灯等设备,用boa服务器,通过网络控制模块,我还想调一下摄像头模块,wifi模块,有时间再说吧。

      15,有了驱动,有了系统,人机交互界面捏?我们就不用12864这种显示了,6410的驱动能力,10寸的TFT屏大约也没问题,只需改一下参数就行了,就是我在帖子里的那个bsp模板的lcd平台数据结构体!然后QT自然就会被我们想到,我学习qt才两三天,现在还没有入门,也不好说些舍么,只是感觉应该比windows下的VC简单,自学了VC也有两个多星期了,没白学啊,可以类推到Qt编程上。学会了qt后就可以自己做一些用户界面,有时间再学一下把。编好了之后应该到rcS下加上一个开机运行就行了!我们可以点击触摸屏来控制各种设备,各种模块喽。这几天感觉整个世界都是由C ,C++等机器语言构成的#¥%…………&

    继续加油,未完待续啊!还是那句话,坚持就会解决问题的


记录一下linux下简单驱动和qt应用程序的开发心得。
上篇写到可以用io口控制各种传感器,经过后期的研究,的确可以这样做,只不过,用io口模拟I2C协议和SPI协议对实时性要求很高,直接在驱动中编写S3C6410的定时器中断,在中断函数中写对传感器的操作是不可行的,经查阅资料和多次用示波器观察传感器波形发现,进入中断后,没等数据处理完,中断就退出了,这是linux操作系统实时性的问题,菜鸟找不到合适的解决方法。最后的解决方案是:用linux内核中的定时器,这样实时性达到了要求,经测试也发现linux内核中的延时函数可以很小,到1us没什么问题,之前自己封装的io口操作函数在无线驱动的程序中失效了,不知是怎么回事,想想是用的虚拟地址和物理地址的映射来直接操作6410寄存器来写的,不知道什么原因!之后用了内核中的io操作函数,且省略了申请io资源这一步,经测试是可行的,只要不让io在同一时间复用就不会有资源冲突问题吧。经示波器观察,io口高低电平变化是很快的,完全满足大多数需求,这就可以解决6410pwm接口少的问题,可以用io口+定时器模拟产生pwm!
内核中定时器我现在只用了两个,不知道再增多有没有问题,有待验证!若没有问题,可以加好多好多的外围设备。
在qt上位机编写,也就是应用程序编写中,有一些新发现。qt有自己的定时器,可以引进slot槽函数,使用她可以进行屏幕数据刷新;用designer设计出图形界面后可以很好的与自己的函数关联,也可自定义slot函数,自定义窗口部件的名称,就是在designer界面右端的小窗口中进行修改,这样写程序使人一目了然的。这些具体的操作忘记了,看一下自己写的mplayer视频播放器的源代码就知道了,说到mplayer播放器,真是一大遗憾,移植成功后,编写应用程序,在arm平台上总是不能把播放器放到自定义窗口部件中,网上也没有好的解决方案,大都是在x86平台下开发的,自己想到一个解决方案,最后因为自己的c++学的太烂而放弃了。
qt中怎样使用驱动,直接用io操作函数就行了,还有read,write,open,close等。原来驱动层数据传到应用层是用read函数的,用copy to user吧,这样定义数组,传数组就可以把任意的驱动层数据传递到应用层了!!open写初始化函数,close写关闭函数,这样可以节约能源,资源。qt中的qprocess可以调用shell脚本,可以直接开启应用程序,可以对有接口的应用程序进行操作!mplayer的暂停啊什么的就是这样控制的!

把arm11当单片机用是很愚蠢的,若这样是浪费资源,要发挥arm的视频音频主频快等优势,不作为单片机,而兼有两者的优势那样才好。

想要再继续研究的话,自己感觉有个方向,就是把linux内核中给出的各种驱动接口的用法搞明白,会用已有的接口,就像uart通讯一样,接口内核已给出,封装为自己的驱动,然后在应用层就能用了,这样才物尽其用~
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值