我正在尝试让内核 4.6 在 S3C6410 板上运行。
为了完成移植并完全启动,我需要配置内核以与板上的 NAND 闪存和 SD 控制器配合使用。
这是我第一次尝试移植/交叉编译内核,因此我更多地寻求有关如何处理和诊断问题的建议,而不是确切的解决方案。
我的主板可以启动内核 4.6,但我无法让它看到 NAND 闪存或 SD 卡(因此没有 rootfs)。
提供了可以运行的内核
该主板附带“2.6.38-GZSD”,与普通的 2.6.38 进行比较时,包括:
一些音频/视频/电视/LCD触摸屏驱动程序,我不关心
按钮/gpio/pwm/adc 的字符设备驱动程序,我不关心
yaffs2 文件系统(我已经移植到 4.6)
针对此板的机器
gzsd4610
定义arch/arm/mach/mach-s3c64xx
NAND 驱动器位于
drivers/mtd/nand/s3c_nand.c
.内核 4.6 有适用于该平台的 NAND 和 ONENAND 驱动程序,因此我尝试使用这些驱动程序,而不是从 2.6.38 移植旧驱动程序。
设置
我通过板上内置的引导加载程序将软件上传到板上。它从 SD 卡加载到 NAND 闪存中:一个 u-boot 映像、一个内核映像和一个 rootfs 映像。
我正在通过串口与主板进行通信。
我正在使用 GCC 6.1.1 编译内核 4.6。 2.6.38-GZSD 内核已编译。我需要一些版本的 GCC 4 才能自己编译它。
我尝试使用 4.6 内核源代码而不进行源代码修改 - 所以只能通过配置 UI(make nconfig
在本例中)。我已经设置了平台,并启用了所有相关的驱动程序(我希望如此)。
该机器设置为 SMDK6410 而不是 GZSD6410,因为 GZSD6410 不在主线中(从 2.6.38 移植它需要比我现在更了解内核的知识)。我认为这个以及可能的 NAND 驱动程序是导致启动失败的原因。
我目前正在使用命令行:
init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2 loglevel=7 earlyprintk
相比之下,工作 2.6.38-GZSD 内核的命令行是:
init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2
具体问题(和日志)
内核SD读卡器初始化失败。
它也是ONENAND初始化失败。
如果我尝试使用 NAND 而不是 ONENAND 那么也失败了。
无论如何,这都会导致内核被无法挂载 rootfs 并出现恐慌。
相比之下,使用 2.6.38-GZSD 成功启动的日志看起来如下像这样。