0%

周谈(32)- 近期遇到的那些事儿

前言

最近有些忙吧,在做一些开发调试的工作,也就遇到了一些问题和知识盲区,稍微回顾一下,也跟大家分享一下。

知识盲区

ECC曲线算法

ECC曲线算法是数学知识的一个实际应用,在前面有出了两篇文章讲了一下大体的原理,更详细的需要看一下标准文档和网络上大神的详细的总结。在编码的过程中,同时也简单地了解了一下ASN1的编码格式。ECC曲线的应用主要是密钥导出、密钥交换、签名和验签。

流密码算法

了解了祖冲之算法和snow3G算法的大概实现流程,在前面也分别有文章简单地聊了一下这两种算法。

在实现算法的过程中,又涉及到一个端序的概念。就是大小端数据的组织。在以往的工作中,默认网络包的格式是大端的,正常主机是小端的。然后,过去在开发的过程中,对于字节流而言,是不区分什么大小端的,大小端都是针对那些整型字段而言的,转换端序的时候也只是对那些整形字段作转换。开发驱动却不是这样的,它这个端序是针对所有数据的, 也就是大端顺序是0 - N, 转为小端顺序就是 N - 0, 这样子。

内核模块代码添加宏

看到同事写的代码里面,需要主动通过添加 #define AAAA, 上网查了一下, 只需要在Makefile里面添加选项就可以了。

1
2
3

EXTRA_CFLAGS += -DAAAA

一般的Makefile可以直接在make之后添加-DAAA, 内核需要手动加到EXTRA_CFLAGS中去。

遇到的问题

dma映射方向搞错,获取不到数据

刚开始驱动调试的时候,不了解dma的接口,然后死活获取不到硬件给的数据,原来是在映射的时候,方向没有设置成双向的。

无符号差值保存到有符号变量中,实际还是一个无符号的数

这是昨天调试的时候发现的一个问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
u32 a = 47;
u32 b = 48;
ssize_t diff = a - b; // diff = -1

//...
if (diff > 0) {

// do sth.
} else {
// do other sth.
}

// 结果走了do sth.分支。。。
// 最后只能改成这样 ssize_t diff = (int)a - (int)b;

虚拟机升级了内核版本后,共享文件夹不可用了

最近升级了一下虚拟机的内核版本,添加了对tcrypt和一些算法的支持。但是,重启之后,发现原来设置的共享文件夹不能用了,进入目录后一片空白。

上网查了一下,重新设置一下共享文件夹。执行如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

cd /mnt
mkdir SF_SHARE

mount -t vboxsf VM_SHARE /mnt/SF_SHARE

# 报错
# /sbin/mount.vboxsf: mounting failed with the error: No such device

# 这是由于增强工具没有安装, 继续下面的命令:

cd /opt/VBoxGuestAdditions-*/init
./vboxadd setup

# 安装好之后, 继续执行, 就可以了。

mount -t vboxsf VM_SHARE /mnt/SF_SHARE # VM_SHARE是设置的共享文件夹名称

作dma映射后,程序卡死

这个是由于作dma映射的空间不是cache对齐的, 导致cache刷新不同步,内容改变导致非法,再去访问就出问题了。所以说,后面要做dma映射的空间,要确保它的其实地址是cacheline对齐的,这样刷新的时候都是同步刷新的,不会跟其他数据混在一起。

使用局部变量作dma映射,程序卡死

执行dma映射的空间不能是全局变量和局部变量。

多个内核版本,修改默认启动版本

由于历史问题,在一台机器上更新了内核版本之后,默认启动的内核还是旧的版本,导致每次需要启动时,选择启动内核版本,有点麻烦。

1
2
3
4
5
6
7
8
9
# 修改 
vi /etc/default/grub

#设置, 如果设置有问题 注意看后面update-grub的命令提示
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.15.0"

update-grub

# 重启后就更新了

更多

编写内核经常导致那个系统挂掉,原来可以在系统主板上也有串口的,可以插个串口线看那个堆栈的,请原谅我现在才知道,哈哈。

生活可以忙忙碌碌随大流,思想必须偷偷摸摸求上进。

最近吃了湾湾的那个瓜, 祖国加油!

周末要去接娃来了,神兽又要来捣蛋了,^_^!


行动,才不会被动!

欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。

博客地址: https://fishmwei.github.io

掘金主页: https://juejin.cn/user/2084329776486919