免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1632 | 回复: 0
打印 上一主题 下一主题

[驱动] 求助,linux系统移植过程出异常。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-17 13:08 |只看该作者 |倒序浏览
一、问题描述:
我有一块cortex-m3内核的MCU板,参考网上一块硬件资源类似的板移植uCLinux操作系统,已经获得他们的
操作系统源码,移植好u-boot。u-boot支持网络与SDRAM,可通过网络启动uImage,但启动linux时没有打印消息。
跟踪后很久才发现原来控制台根本没有注册进内核。

于是我编写另一个UART驱动COM1.用它来跟踪内核启动过程。但UART的输出很奇怪。

例如,我在内核启动过程的某个函数中编写以下代码。

//在linux内核某处增加
...
{
        char test_buf[100]={0};
        int data = 1234;
        sprintf(test_buf,"data=%d\n",data);
        uart_puts(test_buf);
}
...
发现输出会乱码:data=23馾                         //“23馾 ”是乱码
而且乱码很有规律,就是只在格式化才会乱码。即"data=%d\n" 中只有"%d"部分才有问题,"data="可以正常输出。
或者只要没有格式化字符,就能正常输出。

怀疑是SDRAM驱动有问题,因为我的板子与他们的板SDRAM是不一样的,要移植。于是又做了如下实验
//在linux内核某处增加
...
{
        char test_buf[100]={0};
        int data = 1234;
        sprintf(test_buf,"data=%d\n",data);
        if(strcmp(test_buf,"data=1234\n")==0)
        {
                uart_puts("Equal\n");//uart_puts是自己写的UART输出字符串函数。
        }
        else
        {
                uart_puts("Not Equal\n");
        }
}
...
这下更神奇了,居然输出"Not Equal"。这下更怀疑问题可能出现在SDRAM驱动里。

但又实在想不通,SDRAM**问题。因为在u-boot代码里执行以下代码却可以正常输出"data=1234",而
linux启动过程中,也没有修改过SDRAM的配置。
//在u-boot中
...
{
        char test_buf[100]={0};
        int data = 1234;
        sprintf(test_buf,"data=%d\n",data);
        uart_puts(test_buf);
}
...

//
通过自己写的串口跟踪linux上的执行过程,发现内核能执行到start_kernel函数的最后,
        start_kernel() =>
                rest_init() =>
                        kernel_init() =>
                                init_post() =>
                                        最终找不到console与init进程产生内核panic
                               
如果SDRAM有问题的话,按理说不能启动到最后吧,因为中间涉及很多函数调用等操作内存的过程。

二、问题推测:
        1. SDRAM驱动有BUG?(这个可能性较小,因为u-boot中已经能正常使用SDRAM)
        2. linux-gcc 编译选项配置不对。导致内存的堆或者栈异常?

有没有人遇到这种情况?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP