免费注册 查看新帖 |

Chinaunix

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

求救s3c2443 linux2.6移植,停在解压缩完kernel [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-04 15:01 |只看该作者 |倒序浏览
我编译出一个kernel 大小1MB
烧到板子smdk2443
processor s3c2443
64MB SDRAM
128MB NAND flash
在解压缩完的时候停住了
下面一堆数字为head.S DEBUG讯息.

讯息如下:

U-Boot 1.1.6 (Feb 12 2010 - 10:47:37) for SMDK2443


CPU:   S3C2443@534MHz
       Fclk = 534MHz, Hclk = 133MHz, Pclk = 66MHz
Board: SMDK2443 Mobile SDRAM
DRAM:    64 MB
NAND:    128 MB
In:      serial
Out:     serial
Err:     serial
Net:     No ethernet found.
Hit any key to stop autoboot:  0

NAND read: device 0 offset 0x100000, size 0x300000
3145728 bytes read: OK

NAND read: device 0 offset 0x400000, size 0x100000
1048576 bytes read: OK
## Booting image at 30008000 ...
   Image Name:   linux-2.6.23
   Created:      2010-03-04   6:45:02 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1016424 Bytes = 992.6 kB
   Load Address: 30008000
   Entry Point:  30008040
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
## Loading Ramdisk Image at 30800000 ...
   Image Name:   ramdisk
   Created:      2010-03-01   3:59:23 UTC
   Image Type:   ARM Linux RAMDisk Image (uncompressed)
   Data Size:    143486 Bytes = 140.1 kB
   Load Address: 30800000
   Entry Point:  30800000
   Verifying Checksum ... OK

Starting kernel ...

Uncompressing Linux.................................................................... done, booting the kernel.

41129200:0000043C:C000507B
301196E8-3031A0E8>30008000
3031A0E8
30008000: E3A00000 E3A010C1 E59F2108 E321F0D3  EE109F10 EB0000B3 E1B0A005 0A00005C
30008020: EB0000C8 E1B08005 0A00006A EB0000D7  EB000010 E59FD0E8 E28FE000 E28AF010
30008040: E3800002 E3A0501F EE035F10 EE024F10  EA000002 E1A00000 E1A00000 E1A00000
30008060: E1A00000 EE010F10 EE103F10 E1A03003  E1A03003 E1A0F00D E59F409C E1A00004
30008080: E3A03000 E2806901 E4803004 E4803004  E4803004 E4803004 E1300006 1AFFFFF9
300080A0: E59A7008 E1A06A2F E1873A06 E7843106  E2840A03 E5A03000 E59F6060 E2800004
300080C0: E0846926 E1500006 E2833601 94803004  9AFFFFFB E2840A03 E3876203 E5806000
300080E0: E59A700C E5983008 E0840003 E2633901  E3530B02 83A03B02 E0806003 E5983004

上面数字为
processor id(arm920T) : architecture id(smdk2443) : control reg
decompressed kernel start - decompressed kernel end > kernel execution address
end of kernel
dump 256 bytes at start of kernel

我的板子设定如下:
bootcmd=nand read 30008000 100000 300000; nand read 30800000 400000 100000; bootm 30008000 30800000

bootargs=/dev/ram0 rw initrd=30800000,400000 mem=64M ramdisk=143486 init=/linuxrc console=ttySAC0,115200n8 mtdparts=smdk2443-nand:256K(misc),5M(recovery),6M(Kernel),1MB(Ramdisk),60MB(System),20MB(cache),3MB(userdata),-(unused)

我试过用printk在main.c的start_kernel function,发现没显示出来,就表示没跑起来,接下来要怎DEBUG

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2010-03-04 16:13 |只看该作者
刚出来的话应该printk不出来,可以试试在刚开始的时候点led或者蜂鸣器

论坛徽章:
0
3 [报告]
发表于 2010-03-04 17:11 |只看该作者
可以请教要怎呼叫LED嘛?

论坛徽章:
0
4 [报告]
发表于 2010-03-10 15:07 |只看该作者
救命阿...现在情况main.c 里面的start_kernel 用printascii 印出字串,结果没显示
在kernel/head.S 里面的__turn_mmu_on 用printascii 印出字母,也没显示

然后我在compressed/head.S加入印出行数的指令,发现一直卡在clear BSS的地方,它就一直重复,程式码如下:

not_relocated: mov r0, #0
1: kputc #'\n' //印出273
kputc #'2'
kputc #'7'
kputc #'3'

kputc #'\n' //印出r0
kphex r0, 8

kputc #'\n' //印出r2
kphex r2, 8

kputc #'\n' //印出r3
kphex r3, 8

str r0, [r2], #4 @ clear bss
kputc #'\n'
kphex r2, 8

str r0, [r2], #4
kputc #'\n'
kphex r2, 8

str r0, [r2], #4
kputc #'\n'
kphex r2, 8

str r0, [r2], #4
kputc #'\n'
kphex r2, 8

kputc #'2'
kputc #'8'
kputc #'1'
kputc #'\n'

cmp r2, r3
blo 1b //若r2<r3,则跳到前面的TAG 1
bl cache_on

他大概的意思就是,把BSS全部设为0,r0=0,r2=BSS start address,r3=BSS end address,做store的动作,把r0存到r2所指到的位址,做完之后r2 =r2+4,开始将bss里头的值都初始化成0,(cmp r2, r3,blo 1b,) 确认一下是不是到了bss的底部,不到底部的话,jump到(1: kputc #'\ n') 继续做搬移的动作。做完bss初始化jump cache_on (bl cache_on)

印出来讯息如下:

SMDK2443 # go 30008000
## Starting application at 0x30008000 ...

0000000D
30008000
1

175
0000000D
0000000D
2
3000836C
00000000
3
00000000
00000000

273
00000000
0000000D
50004000
0000000D
0000000D
0000000D
0000000D
281

273
00000000
0000000D
50004000
0000000D
0000000D
0000000D
0000000D
281

我发现...它r2好像没加4(就是0000000D),结果就一直循环...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP