修复D1开发板Linux内核

今天维修前几天提到的D1开发板的Linux内核。其具体问题表现为用GCC编译时, 工作正常; 但用Clang编译后, 驱动工作异常, 包括SD卡读写异常, 网络接口收发包异常。

后来经仔细研究, 我发现Clang编译的D1 Linux在网卡发包时, 如果同时收到了包(比如别人发的广播包), 那么发出去的包部分字节会被覆盖为收到的包。cyy了解此现象后, 猜测问题在于缓存一致性没有正确处理, 并开始review D1那帮人写的有关DMA和缓存相关的代码。他发现一段代码比较怪异, 我看过后指出其内联汇编用法不正确, 没有正确地把参数传给汇编指令。最终, 我们一起修复了这个问题。cyy的记录在这里: https://blog.cyyself.name/fixed-d1-board-error-use-in-variables-in-specified-register/

此外, 我还在邮件列表指出了这个问题: https://lore.kernel.org/linux-riscv/e926ec8a-e993-da89-3c8b-0c59272f1751@gmail.com/T/#u

发表评论?

2 条评论。

  1. 这件事情说明,调内核需要精通网络

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/16161QrCode