1

我正在使用 Spansion 64MB NOR 闪存(通过 mtd/cfi_cmdset_0002)并且面临与闪存擦除操作相关的问题。

我有 Linux Kernel 2.6.10 并通过比较 /drivers/mtd 的代码在 2.6.10 和 3.11.1 之间

对 /drivers/mtd/chips/cfi_cmdset_0002.c) 和其他 mtd 文件进行了一些修复,以及检查位切换、闪存擦除时延迟的变化以及为闪存操作启用和禁用 VPP。

我已经对驱动程序/mtd/chips 下的文件进行了更改,但是当检查 /mtd 文件的更改(如 mtdpart、mtdcore、cmdlinepart 等)时,我可以看到需要大量移植,并且似乎需要移植内核本身。有没有办法解决这个问题,因为我不想更改内核,但想用 2.6.10 本身尽可能地升级 mtd 驱动程序代码?

另外我想知道在哪里可以找到从 2.6.10 到 3.11.1 的 mtd 代码的更改日志(我找不到它,这些文件中的修订历史也没有更新以进行更改)

4

1 回答 1

1

有没有办法解决这个问题,因为我不想更改内核,但想用 2.6.10 本身尽可能地升级 mtd 驱动程序代码?

通常,所有对 Linux 的提交都尝试成为实现一大块功能的原子片段。稍微写过代码的人都知道,有些变化是非常孤立的,有些变化是系统性的。即,您有特定的功能变化和基础结构变化。如果您想获得3.11.1的所有更改,则必须获得3.11.1。您需要决定不希望进行哪些基础架构更改。

infradead.org上有一些UbiFs 反向移植,例如UbiFs 2.6.32 反向移植包含 MTD 层的补丁,最高可达 Linux 3.0。进行这些更改并将它们应用于您的树应该不是问题。Linux 2.6.34 和 2.6.32 有更好的后端端口;如果您可以升级到该版本,则需要做的事情就更少了。反向移植驱动程序芯片组特定的所有更改相当简单。有时,基础结构的变化会使后端端口变得困难或不可能。例如,在旧内核中不允许从中断上下文调用函数,但可以在较新版本中调用。结帐一些infradead的git 存储库,一个可能适合您的情况。

通常,我会进行更改,并且只将我需要的端口移植回去。您可以使用 获取单个文件的补丁,git format-patch verA..verB file然后使用git am. 应用 10-20 然后进行构建/回归测试非常简单。由于您必须丢弃补丁,因此合并以后的补丁将变得越来越难。

另外我想知道在哪里可以找到从 2.6.10 到 3.11.1 的 mtd 代码的更改日志(我找不到它,这些文件中的修订历史也没有更新以进行更改)

只需转到目录并使用git log --follow .; 您需要--follow针对文件已移动的情况的选项;至少我认为这会奏效。如果没有,您可以使用 git 在移动前使用 *SHA_ID~1* 签出版本,并使用分离的头获取移动前的历史记录。

于 2013-09-26T00:23:47.457 回答