要不要写点引子呢~其实也没什么~工作需要.但是当你们的嵌入式和APP攻城师,发现~卧槽!ANDROID系统我不了解啊!这怎么搞!
这时候你就需要我这篇文章了。别的不保证!1天让你打通整个层次。拿出demo!
开发环境需求:能编译过去的ANDROID系统源码。然后还有Android studio.(友情提示:搞定开发环境的时间不算在内哦!)
step一.搞清层次结构。
全是干货!绝对不水!
APP-->JNI-->HAL-->Driver
1 2 3
干的全是骨架了吧?四大骨架,衔接之处才是精华 “-->”三大精华。
精华1.这块儿很好解释。jni层最终出来的是so库文件。 那么问题就是APP如何加载库文件。
这个嘛!APP工程师瞬间给你演示加解答再加损你的时间一共加起来也不会5分钟。
以Android studio为例:生成的*.so 存放工程路径下libs/armeabi下。程序内部一句System.loadLibrary("*"); 舒坦!~此处就好比强迫症患者心满意足的微笑!
剩下的在APP中怎样挥霍JNI的接口,你就爱咋咋地吧!
精华2.jni与hal之间的约腚!
到这里我也头大!到处查着书籍和资料····hal无时无刻的强调自己有范儿,有逼格。我有我姿势,要艹我可以!必须地从遵从规范,得有三个结构体。
好啊!来来!三个小婊砸!struct hw_module. struct hw_module_methods_t. struct hw_device_t.按顺序分为婊123····
婊1,3负责的是他们是哪个组织机构的,起码下次客官过来找的时候能找到她们啊~不信的话看官们就去解开衣服看一看啊~
而且婊3已经向你展示我们有什么样的业务了····婊2最直接上来就是open!!!上来就OPEN!上来就OPEN!上来就OPEN!~
所以jni坐不住了····联系方式有了,怎么艹都告诉的明明白白····那就来吧····等到JNI来到了···发现不是那么简单·····
此时是不是想起三个小仙女留给你的线索~你忘啦??回去看!
既然JNI来了~它也绝不是空手而来!它随手祭出了法宝! hw_get_module(),此乃大杀器啊!直接把小婊1抓出来了·····哎哎····接下来的盘问过程过于残忍请参考我提 供的JNI代码中serial_init()~小婊1直接把小婊3供出来了·····大家也知道小三是直接OPEN的······那么····婊2的一些小技巧你就可以享用了哦······
精华3.这其实就是幕后黑手····
当楼上啪啪啪的时候····有人想过没····哪来这么多被啪啪的好市民呢····kernel!一切罪恶之源!强行的带你进小黑屋!把你研究个透。然后·····扔到/dev等HAI层三个小仙女将你包装成HAL~详尽过程请参考linux驱动开发~~
step二 具体实现
当你暗暗得意的时候,你应该再问问自己,高嘛?富嘛?帅吗?赶快滚去实现代码去吧!
我们从驱动层开始。我目前使用的是开发版,所以硬件接口很全~随便拿起一根usb转串口,狠狠的插在USB口上,去查看dev/下······ ········ ·······没反应~
好吧~去kernel里面make menuconfig 在usb下寻找到你使用的USB转串口芯片,选中它!重新烧写内核,你会惊喜~啊的!啊的!发现 dev/下有ttyUSB0这货了!
然后去实现HAL层吧!干巴碟!如果你懒!就把我的hal文件直接拷出来吧~放到 android源码hardware/libhardware下~然后你走进去····直接MM。。。你会M出来个 serial_default.so,这时候你把它放到开发板正在运行的android,/system/lib/hw里面~一般的话~system是只读的。所以你要更改权限。百度remount即可。全乎万换的把 库adb push进去!
jni也同样放至在hardware/libhardware路径下MM出来个serial_runtime.so,在上文已经提到如何在APP中使用。
然后·····就没然后了应该!APP部署下去···你会惊奇的发现这DEMO太尼玛简陋了·····哈哈!
恩!加油吧!诸位!三个小婊砸在等着你光临哦!
附件:不会上传······
http://pan.baidu.com/s/1kTifOEj 给百度分享了~嘎嘎!