开发板型号是TCIEVMK2X REV11,通过TFTP启动内核的时候停止在mon_install 0x0c5f0000这一步,原因不明。
具体的操作步骤如下:
在windows主机上运行TFTP Server,windows主机IP地址为192.168.2.3
使用CCS下载UBOOT运行,然后设置Uboot的环境变量如下:( uImage-k2hk-evm.dtb、arago-console-image-k2hk-evm.cpio.gz、skern-k2hk-evm.bin、uImage-keystone-evm这四个文件是从官网下载的mcsdk_3_01_00_03.tar.gz文件中解压得到)
K2HK EVM # printenv
baudrate=115200
bootargs=console=ttyS0,115200n8 rootwait=1 earlyprintk rdinit=/sbin/init rw root=/dev/ram0 initrd=0x80200000,9M
bootcmd=tftp 0x87000000 uImage-k2hk-evm.dtb; tftp 0x82000000 arago-console-image-k2hk-evm.cpio.gz; tftp 0xc5f0000 skern-k2hk-evm.bin; tftp 0x88000000 uImage-keystone-evm; mon_install 0x0c5f0000; bootm 0x88000000 – 0x87000000
bootdelay=3
bootfile=uImage
ethact=K2HK_EMAC
ethaddr=00:17:ea:f7:a6:87
ipaddr=192.168.2.10
mtdids=nand0=davinci_nand.0
no_post=1
serverip=192.168.2.3
stderr=serial
stdin=serial
stdout=serial
ver=U-Boot 2013.01 (Aug 05 2014 – 11:28:59)
Environment size: 606/262140 bytes
设置完环境变量后运行boot命令,UBOOT能成功从TFTP Server下载文件,文件下载完成后就停止在mon_install这一步了。
K2HK EVM # boot
Using K2HK_EMAC device
TFTP from server 192.168.2.3; our IP address is 192.168.2.10
Filename 'uImage-k2hk-evm.dtb'.
Load address: 0x87000000
Loading: ####
1.5 MiB/s
done
Bytes transferred = 50892 (c6cc hex)
Using K2HK_EMAC device
TFTP from server 192.168.2.3; our IP address is 192.168.2.10
Filename 'arago-console-image-k2hk-evm.cpio.gz'.
Load address: 0x82000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
################################################################
1.8 MiB/s
done
Bytes transferred = 9514378 (912d8a hex)
Using K2HK_EMAC device
TFTP from server 192.168.2.3; our IP address is 192.168.2.10
Filename 'skern-k2hk-evm.bin'.
Load address: 0xc5f0000
Loading: ####
1.5 MiB/s
done
Bytes transferred = 45056 (b000 hex)
Using K2HK_EMAC device
TFTP from server 192.168.2.3; our IP address is 192.168.2.10
Filename 'uImage-keystone-evm'.
Load address: 0x88000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
####
1.8 MiB/s
done
Bytes transferred = 3866448 (3aff50 hex)
执行到这里后终端上就没有反应了,看起来是在执行mon_install 0x0c5f0000时卡住了。
Vincent Han:
您好:
不知您是如何配置U-Boot的环境变量的,您打印的环境变量和我们标准默认的不一样,建议您恢复默认环境变量,您可以使用U-Boot命令‘nand erase.chip’ 来擦除所有环境变量、存储参数以及UBI的image。
在您打印的环境变量里,可能有问题的主要有3点:
1)bootargs中的initrd=0x80200000,这个值应该是0x802000000,因为我们默认启用了36Bit物理地址寻址,所以这个地址是36位的
2)bootargs中的initrd=0x80200000,9M,其中“9M”应该是实际根文件系统大小,9M只是样例里面的值,需要作相应修改
3)bootargs中的bootcmd还少了初始化参数的一部分,应该还需要加 init_ramfs/ubi/net这些宏,会调用默认环境变量里面的command来做参数初始化。
建议您参考论坛里面的操作手册,里面有使用RAMFS和UBIFS启动的详细指导,链接请见下。
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/p/23812/136232.aspx#136232
yy zz1:
回复 Vincent Han:
将bootargs中的initrd=0x80200000修改成0x802000000结果还是一样。
后来发现从git.ti.com/keystone-linux/boot-monitor 网站上下载的boot monitor源码只有K2_BM_13.11版本的能执行完install mon。其他版本都在uboot执行install mon的时候卡死。
Vincent Han:
回复 yy zz1:
您好:
目前我们使用的链接是如下:
Linux kernel: http://git.ti.com/cgit/cgit.cgi/keystone-linux/linux.git/
U-Boot: http://git.ti.com/cgit/cgit.cgi/keystone-linux/u-boot.git/
Boot Monitor: http://git.ti.com/cgit/cgit.cgi/keystone-linux/boot-monitor.git/
目前最新版本是14.07的版本,请您Git下来版本后reset到对应的这几个版本的14.07版本上,多谢!
yy zz1:
回复 Vincent Han:
比较了一下从
http://git.ti.com/cgit/cgit.cgi/keystone-linux/boot-monitor.git/
下载的Boot Monitor代码,完全相同。
参照13.11版的Boot Monitor做了一些改动,编译后mon_install不再卡死。
改动如下:
skern.c 文件
1、在skern_poweron_cpu 函数
if (((val & PD_ACTUAL_STATE_MASK) >> PD_ACTUAL_STATE_SHIFT) == PD_ON) return PSCI_ALREADY_ON;
参照13.11版修改成
if (((val & PD_ACTUAL_STATE_MASK) >> PD_ACTUAL_STATE_SHIFT) == PD_ON){ /* Get the PSM state in the last 5 bits of ret value */ val &= MACHINE_PSM_STATE_MASK; val >>= PD_PSM_STATE_SHIFT; /* make it negative */ val |= (BIT(31)); return (int)val; }
2、*skern_init 函数
if (from == PRIMARY_ENTRY) { skern_puts("ffffddddffffddddfff\n\r"); //此处添加一行打印语句,打印至少19个字符,如果少于19个字符,mon_install执行的时候将卡死,有些莫名奇妙
yy zz1:
回复 yy zz1:
另外还发现一处存在疑问的地方:
在Uboot源码中,传递给内核的machine-arch-type为4011,而在内核代码中,对应的这个值却是4390;
这两个值不匹配导致系统在启动的时候就卡死在starting kernel…这一步;
我将uboot源码中的4011改成4390以后,启动过程现在执行到Unpacking initramfs…
Vincent Han:
回复 yy zz1:
您好:
首先,不知您git完源码后有没有reset到相同版本上(形如:XXXXX14.06或XXXXX14.07),需要确保U-Boot,Linux kernel和Boot monitor都是基于同一个版本。
其次,您在编译K2HK的U-Boot和Linux Kernel时的make config和defconfig需要保持一致,否则默认target的配置不是TI Keystone II device。