前言
最近有些忙吧,在做一些开发调试的工作,也就遇到了一些问题和知识盲区,稍微回顾一下,也跟大家分享一下。
知识盲区
ECC曲线算法
ECC曲线算法是数学知识的一个实际应用,在前面有出了两篇文章讲了一下大体的原理,更详细的需要看一下标准文档和网络上大神的详细的总结。在编码的过程中,同时也简单地了解了一下ASN1的编码格式。ECC曲线的应用主要是密钥导出、密钥交换、签名和验签。
流密码算法
了解了祖冲之算法和snow3G算法的大概实现流程,在前面也分别有文章简单地聊了一下这两种算法。
在实现算法的过程中,又涉及到一个端序的概念。就是大小端数据的组织。在以往的工作中,默认网络包的格式是大端的,正常主机是小端的。然后,过去在开发的过程中,对于字节流而言,是不区分什么大小端的,大小端都是针对那些整型字段而言的,转换端序的时候也只是对那些整形字段作转换。开发驱动却不是这样的,它这个端序是针对所有数据的, 也就是大端顺序是0 - N, 转为小端顺序就是 N - 0, 这样子。
内核模块代码添加宏
看到同事写的代码里面,需要主动通过添加 #define AAAA, 上网查了一下, 只需要在Makefile里面添加选项就可以了。
1 |
|
一般的Makefile可以直接在make之后添加-DAAA, 内核需要手动加到EXTRA_CFLAGS中去。
遇到的问题
dma映射方向搞错,获取不到数据
刚开始驱动调试的时候,不了解dma的接口,然后死活获取不到硬件给的数据,原来是在映射的时候,方向没有设置成双向的。
无符号差值保存到有符号变量中,实际还是一个无符号的数
这是昨天调试的时候发现的一个问题:
1 | u32 a = 47; |
虚拟机升级了内核版本后,共享文件夹不可用了
最近升级了一下虚拟机的内核版本,添加了对tcrypt和一些算法的支持。但是,重启之后,发现原来设置的共享文件夹不能用了,进入目录后一片空白。
上网查了一下,重新设置一下共享文件夹。执行如下命令:
1 |
|
作dma映射后,程序卡死
这个是由于作dma映射的空间不是cache对齐的, 导致cache刷新不同步,内容改变导致非法,再去访问就出问题了。所以说,后面要做dma映射的空间,要确保它的其实地址是cacheline对齐的,这样刷新的时候都是同步刷新的,不会跟其他数据混在一起。
使用局部变量作dma映射,程序卡死
执行dma映射的空间不能是全局变量和局部变量。
多个内核版本,修改默认启动版本
由于历史问题,在一台机器上更新了内核版本之后,默认启动的内核还是旧的版本,导致每次需要启动时,选择启动内核版本,有点麻烦。
1 | 修改 |
更多
编写内核经常导致那个系统挂掉,原来可以在系统主板上也有串口的,可以插个串口线看那个堆栈的,请原谅我现在才知道,哈哈。
生活可以忙忙碌碌随大流,思想必须偷偷摸摸求上进。
最近吃了湾湾的那个瓜, 祖国加油!
周末要去接娃来了,神兽又要来捣蛋了,^_^!
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。
博客地址: https://fishmwei.github.io
掘金主页: https://juejin.cn/user/2084329776486919