• 深夜看代码2


    昨天的文章

    晚上读内核代码

    有人评论说好像说了一些什么,好像又没有说什么,所以我到底是在说什么呢?

    因为今天已经把内核修改好了,自己也测试了,所以这次好好说下,我到底是说了什么,又做了什么。

    bc286ea2e26d0ec60d5207e61b7e021b.png

    ——问题是什么?

    还是从HID来说,上面留言说的没问题,USB嘛,不就是一个发送,一个接口,设备到主机通过in端口,这个没问题。

    在HID低版本的时候用的是endpoint 0端口,也不能说是低版本,即使在高版本,也是可以用endpoint 0端口的「不同之处在于低版本只有endpoint 0」,我也拿了一些竞品的产品来看,他们也是可以通过endpoint 0来发送信息给设备端的。

    问题是,我们用的RK方案打开了out端点后不可以。

    其他产品在打开out端口的时候,也是可以用endpoint 0 发送数据到设备的。

    为什么我揪着这个endpoint 0发送呢?

    是因为测试发现通过这个端口可以使用set report 函数,用这个函数来发送消息不会出现偶发的超时问题。

    RK是怎么回复的呢?

    他们说他们提供的方案是用endpoint 0的,都不会有问题。

    而且看了内核代码,确实是配置想用哪个就用哪个,用户自己选择,用了out ,endpoint 0 就用不了了。

    605e1c72f84bcbc0bddf518346195c7d.png

    人家代码也是写得很清楚了,就是更子的。

    ——那我们为什么不直接用RK的方案,直接用endpoint 0 就好了

    直接用endpoint 0我在之前的文章也说了,这样就可以兼容MAC的电脑,也不会出现一些乱七八糟可能性的问题。

    但是问题是,我们的应用程序开发的很多功能,都已经实现,都是用的out端点,包的长度也是1024, 这方案一搞下去,那所有人都要重写代码,重新测试了。

    da5a25d933046f4375324e0720602520.png

    —— 后面怎么修改了?

    因为如果加上

    f5736b47aff0f42e86a9a7ce4bc67aa3.png

    设备是可以调用HOST的setreport接口的,我要做的,无非就是在这里判断下数据指令,然后传给应用程序就好了。

    问题就出在这里,usb的一些结构体,如果没有好好写,就可能影响到系统的东西。

    OUT端点写入数据的时候,是直接用到req结构体的

    77456a816bfb610d151c6a73b603d029.png

    这段代码在out端点接收没有问题,但是放到setreport部分来处理就出现了问题。

    setreport的处理不一样

    他给HOST来的数据在内核重新分配了空间。

    6b1c7791ddbc8197ea3be1abfa51e774.png

    然后就针对这些不同的逻辑修改修改。

    细节就不说了

    内核代码不像应用代码,应用的调试是比较方便的,内核的调试涉及硬件设备就不同了,而且接口的处理也会不同,稍不注意引起的空指针问题,整个系统就挂了,应用还可以用守护进程拉起来,内核就不行,只能重启。

    不过内核都是C,看起来还是比较舒服的。

    就这些!

    参考:

    https://blog.csdn.net/zqixiao_09/article/details/52973392

    450782e2d7001157bb1e54a41bf70f0b.jpeg

    80b2733b862323a47d7aaa9b9f6c40d4.png

  • 相关阅读:
    crm、scrm、ocrm、acrm、ccrm等等分别是什么?有什么区别?
    Ros Launch启动管理
    day36:网编day3,TCP、UDP模型
    05 css选择器以及优先级?说盒子模型的了解?知道BFC?三栏布局的几种方式? CSS的几种预处理器?有几种让盒子水平垂直居中的方法?
    神经网络图像处理实例图,神经网络图像识别算法
    ES6:const声明
    【Linux初阶】Linux调试器-gdb使用 | gdb的 l/b/info/d/r/n/s/bt/finish/p/(un)display/q
    强化学习案例复现(2)--- MountainCar基于DQN
    洛谷P1763 埃及分数
    008:连续跌三天,买第四天上涨的盈利计算
  • 原文地址:https://blog.csdn.net/weiqifa0/article/details/126433830