我的手臂工具链可能有问题,但也许还有别的我做错了.我有三星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频率)更改为某些非标准值(已尝试所有标准值).而不是指示将内核加载到内存中的点,我只有垃圾而不是.不幸的是,它不可能完成启动过程,因为网络接口和文件系统都没有出现.所以我发现它在中间某处恐慌.
任何想法我接下来应该做什么?
谢谢&问候,
克里斯
解决方法:
这里可能会发生很多不同的事情.
听起来你正在谈论一个串口,并且一旦控制从uboot传递到内核,它似乎就会产生垃圾.我理解正确吗?
查看在内核命令行上为串行控制台指定波特率,奇偶校验等.
哦,还有IIRC,ARM Linux树中有一些’early_printk’可以帮助你调试串口控制台问题. (但我会警告你 – 自从我处理这个问题已经过了几年,所以我的记忆很模糊.)
仔细检查内存地址布局(所有各种设备的位置)是否与您的主板相匹配. (我认为这可能不是问题,但是为了完整性,我想提一下.)
你说你有一个正常工作的二进制内核;将该内核的内核配置与您用于构建内核的配置进行比较.调查每个差异,特别是ARM的任何特定差异.
您可能需要仔细检查工具链的字节顺序与电路板的预期结果.某些ARM / XScale处理器可以在软件中配置为big-endian或little-endian,因此值得仔细检查.