我的手臂工具链可能有问题,但也许还有别的我做错了。我使用 Samsung s3c2440 ARM9 uC使用中文制作开发板 qq2440 。我正在使用Ubuntu x86与原生gcc(4.3.3)和交叉编译版本arm-unknown-linux-uclibc-gcc(crosstool-NG-1.3.2)4.3.2
我按照http://blog.leshak.ru/english/pages/how-to-install-u-boot-linux-2629-rootfsjffs2-busybox-1132-into-nand-qq2440/的教程进行了操作 并为该主板使用了 Leshak 的内核补丁。问题是他的二进制文件工作得很好而我的二进制文件没有......
我通过RS232(串口)与我的主板通信,并且我在目标Linux上配置了串行终端。我使用 Leshak的 uboot图像。要配置我的内核,我使用以下命令行:
qq2440> setenv bootargs 'noinitrd root=/dev/mtdblock2 rootfstype=jffs2 rw console=ttySAC0,115200'
对于目标,我使用vanilla Linux源2.6.29版,其中包含由 Leshak 创建的补丁。我并不认为Linux会正式支持它,因为它不是主流产品。
我的内核映像开始启动,但它可能会将带宽(或CPU频率)更改为某些非标准值(已尝试所有标准值)。而不是指示将内核加载到内存中的点,我只有垃圾而不是。不幸的是,它不可能完成启动过程,因为网络接口和文件系统都没有出现。所以我发现它在中间某处恐慌。
任何想法接下来我该怎么办?
谢谢&的问候,
克里斯
答案 0 :(得分:2)
这里可能会发生很多不同的事情。
听起来你在谈论一个串口,并且一旦控制从uboot传递到内核,它似乎就会产生垃圾。我理解正确吗?
查看在内核命令行上为串行控制台指定波特率,奇偶校验等。
哦,还有IIRC,ARM Linux树中有一些'early_printk'可以帮助你调试串口控制台问题。 (但我会警告你 - 自从我处理这个问题已经过了几年,所以我的记忆模糊不清。)
仔细检查内存地址布局(所有各种设备的位置)是否与您的主板相匹配。 (我认为这可能不是问题,但为了完整性,我想提一下。)
你说你有一个正常工作的二进制内核;将该内核的内核配置与您用于构建内核的配置进行比较。调查每一个差异,特别是ARM的任何特定差异。
您可能需要仔细检查工具链的字节顺序与电路板的预期结果。 ARM / XScale处理器中的一些可以在软件中配置为big-endian或little-endian,因此值得仔细检查。
答案 1 :(得分:1)
只需启用内核的调试版本[在构建uImage时],这样您就可以更清晰地了解场景[只是因为所有的printk都会被启用,所以启动速度会慢一点。“ / p>
您可以检查是否将正确的参数传递给UART,即。串口名称,它的波特率等这将由主板制造商三星
WRT网络而不是DHCP你可以只为系统分配一个静态IP地址,因为DHCP进程可能仍然没有开启。
另一个更好的选择是使用NFS但是,这取决于您的选择和应用程序的目的。要使用NFS,您的网络应该是UP&运行,你的文件系统应该共享。
由于Retracile已经指出“Endianness”可能是一个值得研究的地方!!!
您可以参考可能对您有所帮助的this链接,因为它特定于S3C2440
希望这有帮助。
-hjsblogger
答案 2 :(得分:0)
当我从picocom中省略了--send-cmd时,我有一个类似的问题。这是我用mini2440向picocom发出串口uBoot通信的命令。
picocom -b 115200 / dev / ttyS0 --send-cmd“sx -vv”