用旧内核更新mtd驱动程序

时间:2013-09-24 06:42:19

标签: linux-kernel embedded-linux flash-memory

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

通常Linux的所有提交都试图成为实现一大块功能的原子片。任何编码过的人都会知道某些变化是非常孤立的,而其他变化则是系统性的。即,您具有特定的功能更改和基础架构更改。如果要获取所有 3.11.1 更改,则必须获取 3.11.1 。你需要决定你不想要的基础设施变化。

infradead.org 上有一些 UbiFs 反向移植,例如UbiFs 2.6.32 backport包含MTD层到Linux 3.0的补丁。将这些更改应用到您的树中应该不是问题。 Linux 2.6.34和2.6.32有更好的后端口;如果你可以升级到那个版本,那么就必须做的更少。将所有驱动程序芯片组特定的更改反向移植相当简单。有时,存在基础结构更改,使后端口变得困难或不可能。例如,不允许在较旧的内核中从中断上下文调用函数,但可以在较新的版本中调用。查看一些git repositories at infradead,可能适合您的情况。

一般情况下,我会进行更改,只需返回端口我需要的内容。您可以使用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 *并使用分离的头来获取移动前的历史记录。