4

我的手臂工具链可能有问题,但也许我做错了其他事情。我有使用三星 s3c2440 ARM9 uC的中国制造的开发板qq2440 。我正在使用带有本机 gcc(4.3.3) 和交叉编译版本 arm-unknown-linux-uclibc-gcc (crosstool-NG-1.3.2) 4.3.2 的 Ubuntu x86

我遵循了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 频率)更改为某个非标准值(已经尝试了所有标准值)。而不是指示将内核加载到内存中的点,我只有垃圾。不幸的是,它可能不会完成启动过程,因为网络接口和文件系统都没有出现。所以我发现它在中间的某个地方发生了恐慌。

有什么想法我接下来应该做什么?

感谢和问候,

克里斯

4

3 回答 3

2

这里可能会发生很多不同的事情。

听起来您在谈论串行端口,并且一旦将控制权从uboot传递给内核,它似乎就会产生垃圾。我理解正确吗?

查看在内核命令行上为串行控制台指定波特率、奇偶校验等。

哦,还有 IIRC,ARM Linux 树中有一些“early_printk”可以帮助您调试串行控制台问题。(但我会警告你——我处理这个问题已经有几年了,所以我的记忆很模糊。)

仔细检查内存地址布局(所有各种设备的位置)是否与您的电路板匹配。(我认为这可能不是问题,但为了完整起见,我想提一下。)

你说你有一个可以正常工作的二进制内核;将该内核的内核配置与您用于构建内核的配置进行比较。调查每一个差异,尤其是 ARM 特有的差异。

您可能需要仔细检查您的工具链的字节顺序与您的电路板的预期。 一些ARM / XScale 处理器可以在软件中配置为大端或小端,因此可能值得仔细检查。

于 2009-08-19T02:25:31.773 回答
1
  1. 只需启用内核的调试构建[在构建 uImage 时],这样您就可以更清楚地了解场景[只是会使您的启动有点慢,因为所有的 printk 都将被启用]。

  2. 你能检查你是否将正确的参数传递给UART,即。串行端口名称,它的波特率等这将由板制造商 - 三星提供

  3. WRT 网络而不是 DHCP,您可以只为您的系统分配一个静态 IP 地址,因为 DHCP 进程可能仍未开启。

  4. 还有一个更好的选择是使用 NFS,但是是的,这取决于您的选择和应用程序的目的。要使用 NFS,您的网络应该已启动并正在运行,并且您的文件系统应该是共享的。

正如 retracele 已经指出的那样,“字节顺序”可能是一个值得研究的点!

您可以参考链接,这可能会对您有所帮助,因为它特定于 S3C2440

希望这可以帮助。

-hjsblogger

于 2009-10-12T11:55:30.940 回答
0

当我从 picocom 中省略 --send-cmd 时,我曾经遇到过类似的问题。这是我向 picocom 发出的命令,用于与 mini2440 进行串行 uBoot 通信。

picocom -b 115200 /dev/ttyS0 --send-cmd "sx -vv"

于 2009-09-25T04:50:55.057 回答