QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2610|回复: 12

请问skyeye模拟pxa27x跑linux的问题,请指教

[复制链接]
发表于 2008-5-21 17:26:01 | 显示全部楼层 |阅读模式
各位大虾请帮忙看看,谢谢!
    本人在编译linux时,在make menuconfig中选择使用PXA270处理器的mainstone开发板作为目标系统进行试验(Intel HCDDBBVA0 Development Platform),然后用交叉编译器编译后想使用skyeye进行模拟,跑到以下地方就halt了。。。
[root@jian linux-2.6.23]# skyeye -e vmlinux
big_endian is false.
arch: arm
cpu info: xscale, pxa27x, 69054110, fffffff0, 2
mach info: name pxa_mainstone, mach_init addr 0x806e360
uart_mod:0, desc_in:, desc_out:, converter:
SKYEYE: use xscale mmu ops
Loaded RAM   ./arch/arm/boot/zImage
Loaded RAM   ./initrd-2.6.23.img
start addr is set to 0xc0008000 by exec file.

现在还在单步跟踪之中,但是总觉得我的skyeye.conf文件有问题,以下是我的skyeye.conf文件:
cpu: pxa27x
mach: pxa_mainstone
mem_bank: map=I, type=RW, addr=0x40000000, size=0x0c000000

mem_bank: map=M, type=RW, addr=0x00000000, size=0x0c000000,file=./arch/arm/boot/zImage, boot=yes
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00800000,file=./initrd-2.6.23.img
mem_bank: map=M, type=RW, addr=0xc1000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0xc1800000, size=0x02800000

不知我的skyeye.conf文件有无问题?有没有什么建议?谢谢关注!!
发表于 2008-5-21 23:09:48 | 显示全部楼层
ksh@server:/opt/testsuite/linux/build-2.6.23-pxa27x> make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnu-  mainstone_defconfig
ksh@server:/opt/testsuite/linux/build-2.6.23-pxa27x> make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnu-
ksh@server:/opt/testsuite/linux/build-2.6.23-pxa27x> cat skyeye.conf
cpu: pxa27x
mach: pxa_mainstone
mem_bank: map=I, type=RW, addr=0x40000000, size=0x0c000000
mem_bank: map=M, type=RW, addr=0xa0000000, size=0x00008000
mem_bank: map=M, type=RW, addr=0xa0008000, size=0x00800000,file=./arch/arm/boot/zImage,boot=yes
mem_bank: map=M, type=RW, addr=0xa0808000, size=0x007f8000
mem_bank: map=M, type=RW, addr=0xa1000000, size=0x03000000
#mem_bank: map=M, type=RW, addr=0xd0000000, size=0x00100000
#log: logon=1, logfile=/tmp/sk2.log, start=500000, end=1500000
lcd:state=on,type=pxa,mod=gtk

#dbct:state=on
ksh@server:/opt/testsuite/linux/build-2.6.23-pxa27x> /home/ksh/cvs/skyeye/skyeye-v1/branches/skyeye-1.2.4/binary/skyeye

**************************** WARNING **********************************
If you want to run ELF image, you should use -e option to indicate
your elf-format image filename. Or you only want to run binary image,
you need to set the filename of the image and its entry in skyeye.conf.
***********************************************************************

big_endian is false.
arch: arm
cpu info: xscale, pxa27x, 69054110, fffffff0, 2
mach info: name pxa_mainstone, mach_init addr 0x41a520
lcd_mod:1
uart_mod:0, desc_in:, desc_out:, converter:
SKYEYE: use xscale mmu ops
Loaded RAM   ./arch/arm/boot/zImage
start addr is set to 0xa0008000 by exec file.
Uncompressing Linux................................................................................. done, booting the kernel.
SKYEYE:Error in mem_read_word, no bank found, NumInstrs 124342128, mem_read_word addr = 0 no bank
Linux version 2.6.23 (ksh@server) (gcc version 4.1.0) #1 Wed May 21 22:46:45 CST 2008
CPU: XScale-PXA270 [69054110] revision 0 (ARMv5TE), cr=00003937
Machine: Intel HCDDBBVA0 Development Platform (aka Mainstone)
Warning: bad configuration page, trying to continue
Memory policy: ECC disabled, Data cache writeback
Run Mode clock: 0.00MHz (*0)
Turbo Mode clock: 0.00MHz (*0.0, inactive)
Memory clock: 0.00MHz (/1)
System bus clock: 0.00MHz
CPU0: D VIVT undefined 5 cache
CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
Built 1 zonelists in Zone order.  Total pages: 16256
Kernel command line: root=/dev/nfs ip=bootp console=ttyS0,115200 mem=64M
PID hash table entries: 256 (order: 8, 1024 bytes)
Console: colour dummy device 80x30
console [ttyS0] enabled
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 62336KB available (2280K code, 194K data, 88K init)
SLUB: Genslabs=22, HWalign=32, Order=0-1, MinObjects=4, CPUs=1, Nodes=1
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc001ea94, instr ee166610
回复

使用道具 举报

 楼主| 发表于 2008-5-22 17:28:26 | 显示全部楼层
谢谢大虾热心的回复!:)
按照你的config,我做了一些修改,主要是我希望linux启动的时候地址在0xc0800000上,所以修改了/arm/arch/mach-pxa下的Makefile.boot的zreladdr地址为0xc0800000,同时修改了include/asm-arm/arch-pxa下memory.h:
#define PHYS_OFFSET        UL(0xc0000000),
以及/arch/arm/mach-pxa 下mainstone.c
:.boot_params        = 0xc0000100,
以下是我的conf文件:
[root@jian linux-2.6.23]# cat skyeye.conf
cpu: pxa27x
mach: pxa_mainstone
mem_bank: map=I, type=RW, addr=0x40000000, size=0x0c000000

#mem_bank: map=M, type=RW, addr=0x00000000, size=0x0c000000
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00800000,file=./arch/arm/boot/zImage, boot=yes
mem_bank: map=M, type=RW, addr=0xc1000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0xc1800000, size=0x02800000
#mem_bank: map=M, type=RW, addr=0xd0000000, size=0x00100000
#log: logon=1, logfile=/tmp/sk2.log, start=500000, end=1500000
lcd:state=on,type=pxa,mod=gtk


但是解压完后会出现死循环:参照你的输出,也有这句,不知有没有照成死循环?还有,你的booting the kernel.和SKYEYE:cp6_mrc unknown cp6 regs!!!!!!之间有关于内核的信息输出,我的怎么没有呢?请再帮忙看看,再次谢谢!!
[root@jian linux-2.6.23]# skyeye -e vmlinux
big_endian is false.
arch: arm
cpu info: xscale, pxa27x, 69054110, fffffff0, 2
mach info: name pxa_mainstone, mach_init addr 0x806e360
lcd_mod:1
uart_mod:0, desc_in:, desc_out:, converter:
SKYEYE: use xscale mmu ops
Loaded RAM   ./arch/arm/boot/zImage
start addr is set to 0xc0800000 by exec file.
Uncompressing Linux............................................................................................... done, booting the kernel.
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrcpcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x7,reg[15] 0xc0024ab8, instr ee170610
SKYEYE:cp6_mrc unknown cp6 regs!!!!!!
SKYEYE: xscale_cp6_mrc:opcode_2 0x0, CRm 0x0, reg 0x6,reg[15] 0xc0024ab4, instr ee166610
(以上两句不断循环。。。。。。)
回复

使用道具 举报

 楼主| 发表于 2008-5-23 13:33:33 | 显示全部楼层
没人遇到相应的问题吗?自己顶一下,希望大家帮忙!!
回复

使用道具 举报

 楼主| 发表于 2008-5-24 09:58:42 | 显示全部楼层
还没搞定哦,各位大哥给点意见,给个思路:(
回复

使用道具 举报

发表于 2008-5-27 19:54:46 | 显示全部楼层

回复 #3 mjko007 的帖子

你到底是运行vmlinux还是运行zImage??? 如果运行vmlinux,执行"skyeye -e vmlinux" , 如果运行zImage, 则直接执行“skyeye”
回复

使用道具 举报

发表于 2008-5-28 08:35:34 | 显示全部楼层

回复 #6 ksh 的帖子

为何zImage可以不加参数呢? 是因为zImage的格式的问题吗?
回复

使用道具 举报

 楼主| 发表于 2008-6-5 10:12:57 | 显示全部楼层
已经跑起来一段时间了,那2句不断循环的语句只是打印信息,可以在skyeye里面注释掉,然后从新启动后可以看到能进入linux的
至于楼上问的问题,因为在skyeye.conf里面把zimge写好了,所以直接skyeye就好,skyeye后面的- e参数说明是要使用elf格式的,要用vmlinux才行
回复

使用道具 举报

发表于 2008-6-5 10:50:23 | 显示全部楼层
这应该也算是SkyEye的bug, 相同的出错信息应该只打印一次。争取在skyeye-1.2.5修改。
回复

使用道具 举报

 楼主| 发表于 2008-6-6 11:16:08 | 显示全部楼层
恩,在请问一下大侠,我现在用skyeye +linux+ramdisk可以跑起来,进入到shell,但是用skyeye+uboot+linux+ramdisk就跑不起来,根据我的跟踪,在init/main.c下如下的代码里面:
static int __init kernel_init(void * unused)
{
    lock_kernel();
    /*
     * init can run on any cpu.
     */
    set_cpus_allowed(current, CPU_MASK_ALL);
    /*
     * Tell the world that we're going to be the grim
     * reaper of innocent orphaned children.
     *
     * We don't want people to have to make incorrect
     * assumptions about where in the task array this
     * can be found.
     */
    init_pid_ns.child_reaper = current;

    __set_special_pids(1, 1);
    cad_pid = task_pid(current);

    smp_prepare_cpus(max_cpus);

    do_pre_smp_initcalls();

    smp_init();
    sched_init_smp();

    cpuset_init_smp();

    do_basic_setup();

    /*
     * check if there is an early userspace init.  If yes, let it do all
     * the work
     */

    if (!ramdisk_execute_command)
    {
        printk(KERN_WARNING "debug:no ramdisk_execute_command ;set ramdisk_execute_command = /init  \n");
        ramdisk_execute_command = "/init";
    }


    printk(KERN_WARNING " debug:ramdisk_execute_command =%s in  __init kernel_init\n",ramdisk_execute_command);


    if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) {
        printk(KERN_WARNING "debug:want to set  ramdisk_execute_command = NULL !! \n");
        ramdisk_execute_command = NULL;
        prepare_namespace();
    }


    /*
     * Ok, we have completed the initial bootup, and
     * we're essentially up and running. Get rid of the
     * initmem segments and start the user-mode stuff..
     */
    init_post();
    return 0;
}
当使用skyeye+linux+ramdisk时,代码在if (sys_access((const char __user *) ramdisk_execute_command, 0) != 0) 判断时不会进入下面的代码,从而顺利进入init_post()函数;但当使用skyeye+uboot+linux+ramdisk时,判断代码会进入下面的语句,从而把ramdisk_execute_command设为null,接着引发kernel panic,进不了_post(),     这2种情况的差别就是地一种情况skyeye+linux+ramdk下的linux的cmdline参数我设置了;第二种情况就是把cmline参数拷贝到uboot的CONFIG_BOOTARGS   里面去,然后把linux里的cmdline参数设为null,然后压缩用mkiamge来压,这不属于skyeye的问题,但我想听听你对此的看法和判断是什么?请给点意见,谢谢!!
回复

使用道具 举报

发表于 2008-6-6 12:59:42 | 显示全部楼层
首先流程应该是:
1、u-boot把cmdline字符串放到内存的一个位置
2、linux启动的时候从内存的这个位置读取cmdline(根据你前面的修改,应该是  boot_params  = 0xc0000100)
3、解析cmdline

你需要阅读相关代码,并且用skyeye去跟踪相关代码。确认上面的流程是否都执行正确了?

[ 本帖最后由 ksh 于 2008-6-6 13:18 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2008-6-6 14:34:19 | 显示全部楼层
哦,之前没有这样跟踪,因为我觉得参数应该传递成功,因为在模拟uboot+linux+ramdisk时打印出以下的信息:
Linux version 2.6.23 (root@mjko007) (gcc version 4.2.3 (Sourcery G++ Lite 2008q1-126)) #1 Thu Jun 5 23:31:07 CST 2008
CPU: XScale-PXA270 [69054110] revision 0 (ARMv5TE), cr=00003907
Machine: Intel HCDDBBVA0 Development Platform (aka Mainstone)
Memory policy: ECC disabled, Data cache writeback
Run Mode clock: 0.00MHz (*0)
Turbo Mode clock: 0.00MHz (*0.0, active)
Memory clock: 0.00MHz (/1)
System bus clock: 0.00MHz
CPU0: D VIVT undefined 5 cache
CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
Built 1 zonelists in Zone order.  Total pages: 16256
Kernel command line: console=ttyS0,115200 rw root=/dev/ram0 initrd=0xc1000000,0x00800000 mem=64M
PID hash table entries: 256 (order: 8, 1024 bytes)
Console: colour dummy device 80x30
console [ttyS0] enabled
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
以上这句加粗的话是我在uboot里面设置的,在linux里面的cmd没有设置以上参数,而内核已经读出来了,这不能说明参数传递成功了吗?

还有,你说的u-boot把cmdline字符串放到内存的一个位置,和linux从这个位置读取,这个我之前没有注意到,但是好像在u-boot的文档和相关文章里面没有看到相关描述哦,请问这是通过哪个CFG——定义的呢?还请再指教指教,谢谢你的热心回复!!
回复

使用道具 举报

 楼主| 发表于 2008-6-7 15:03:13 | 显示全部楼层
根据ksh大侠的提示,昨天下午调了一下午,仍没结果,但发现自己有些知识点没有掌握,昨晚又恶补了一晚上资料,现在终于能在skyeye+uboot+linux+ramdisk上起来,看到shell提示符了,现在把方法说一下,还有期间碰到的问题以及自己的判断说一下,还请大侠指出错误之处。
我之前在uboot的bootargs里面设置的initrd=0xc1800000,每次在内核checking if image is initramfs... it is时总能认出来,但是在往下就是kernel panic,后来跟踪uboot里面的do_linux_bootm函数时,把initrd_start和initrd_end打印出来,
    if (initrd_start && initrd_end)
        {
        printf("debug:initrd_start=0x%0x initrd_end=0x%0x .................\n",initrd_start,initrd_end);
。。。
发现initrd_start的值是0xc18000040,个人觉得uboot在进行ramdisk的checksum后并没有把该文件头去掉,仍然对它进行保留(该文件头由mkimage生成),所以当linux加载ramdisk时认不出前面的0x40字节(但为什么会出现checking if image is initramfs... it is呢?),所以把bootargs的initrd设置成0x0c18000040就好了。
之前ksh大侠所说的设置params地址的问题,所以我觉得很有道理,但也有疑问,就是如果地址不对,kenel启动的时候怎么会把
Kernel command line: console=ttyS0,115200 rw root=/dev/ram0 initrd=0xc1800040,0x00800000 mem=64M打印出来呢,参看do_linux_bootm里面的代码:
theKernel (0, bd->bi_arch_number, bd->bi_boot_params);可以看见是直接把bootparams的地址传给linux的,为了验证我的想法,我故意把board/mainstone.c下面的
gd->bd->bi_boot_params = 0xc0000200;设成0xc00020;与linux里面的不一样,(linux里面是  boot_params  = 0xc0000100)结果仍然能跑起来,证明了我的想法。
但是参照一些资料时,theKernel (0,bd->bi_arch_number);是没有地三个参数的,这可能是uboot版本的问题,所以如果版本不是u-boot1.1.6的,估计是要把这两个地址都设成一样才能正确传递参数。
还有关于 CONFIG_INITRD_TAG的问题,我的uboot里面一开始CONFIG_INITRD_TAG   是关掉的,参考资料觉得因该把这个打开参能正确传递initrd的地址,但是在调通后把他打开和关闭都好像没有任何影响,现在还不知道这是怎么回事。还请各位大侠抽时间答疑一下。
    不管怎样,终于在欧洲杯之前把它调通了,今晚可以安心看球了,,谢谢大侠!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-26 03:14 , Processed in 0.038447 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表