完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我按照网上的说明配置并编译内核,
并按照U boot中readme的方法制作uImage,可是就是无法启动 输出信息如下: Created: 2008-01-19 5:57:43 UTC Image Type: ARM Linux Kernel Image (gzip compressed) Data Size: 1078173 Bytes = 1 MB Load Address: 30008000 Entry Point: 30008040 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Starting kernel ... 过一会uboot又重启了 U-Boot 1.1.4 (Jan 14 2008 - 16:41:42) U-Boot code: 33F80000 -> 33FA2540 BSS: -> 33FA6CF0 RAM Configuration: Bank #0: 30000000 64 MB Flash: 2 MB NAND: 64 MB In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 改了 几次 bootargs 和commandline 总是调不通!!! 请南方大哥指点!!! :( :( |
|
相关推荐
4个回答
|
|
|
|
|
|
使用go命令的时候,输出的信息好像要多一些。。
不知道u-boot的bootargs到底传递给内核没有。。。。。 每次都是这样。。。。。 MA2410#bdinf arch_number = 0x000000C1 env_t = 0x00000000 boot_params = 0x30000100 DRAM bank = 0x00000000 -> start = 0x30000000 -> size = 0x04000000 ethaddr = 01:02:03:04:05:06 ip_addr = 192.168.3.6 baudrate = 115200 bps linux-2.6.14.1archarmkernelhead.S 中也加入了下面的代码。。。。。 mov r0, #0 mov r1, #0xc1 ldr r2, =0x30000100 都已经搞了一周了。。。。。 还没有进展,真是郁闷:~ |
|
|
|
我也遇到这样的问题,starting kernel后一会就重启了。
刚刚搜索到一些信息,希望有帮助 http://hi.baidu.com/liudefang888 ... c689550fb34581.html * main_loop:该函数主要用于设置延时等待,从而确定目标板是进入下载操作模式还是装载镜像文件启动内核。在设定的延时时间范围内,目标板将在串口等待输入命令,当目标板接到正确的命令后,系统进入下载模式。在延时时间到达后,如果没有接收到相关命令,系统将自动进入装载模式,执行bootm 30008000 30800000命令,程序进入do_bootm_linux()函数,调用内核启动函数; 3) 装载模式下系统将执行do_bootm_linux()函数,0x30008000是内核在SDRAM中的起始地址;0x30800000是ramdisk在SDRAM中的起始地址;0x40000是内核在Flash中的位置,0x100000是数据块的大小;0x140000是ramdisk在FLASH中的位置,0x440000是数据块的大小。系统调用memcpy()函数将内核从flash和ramdisk复制到SDRAM中,具体如下: memcpy((void *)0x30008000, (void *)0x40000, 0x100000);//复制数据块 memcpy((void *)0x30800000, (void *)0x140000, 0x440000);//复制数据块 通常,将内核参数传递给Linux操作系统有两种方法:采用struct param_struct结构体或标记列表。本系统中采用了第二种方法。 一个合法的标记列表开始于ATAG_CORE,结束于ATAG_NONE。ATAG_CORE可以为空,一个空的ATAG_CORE的size字段设为“2”(0x00000002)。ATAG_NONE 的size字段必须设为“0”。标记列表可以有任意多的标记(tag)。在嵌入式Linux系统中,通常由U-Boot设置的启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等。 在本系统中,传递参数时分别调用了以下tag: setup_start_tag(bd); //标记列表开始 setup_memory_tags(bd); //设置内存的起始位置和大小 setup_commandline_tag(bd, commandline); /*Linux内核在启动时可以命令行参数的形式来接收信息,利用这一点可以向内核提供那些内核不能检测的硬件参数信息,或者重载(override)内核检测到的信息,这里char *commandline "initrd=0x30800000,0x440000 root=/dev/ram init=/linuxrc console=ttyS0";*/ setup_ramdisk_tag(bd); //表示内核解压后ramdisk的大小 setup_initrd_tag(bd, initrd_start, initrd_end); //设置ramdisk的大小和物理起始地址 setup_end_tag(bd); //标记列表结束 其中bd_t *bd = gd->bd是指向bd_t 结构体的指针,在该结构体中存放了关于开发板配置的基本信息。标记列表应该放在内核解压和initrd的bootp程序都不会覆盖的内存区域,同时又不能和异常处理的入口地址相冲突。建议放在RAM起始的16K大小处,在本系统中即为0x30000100处。 U-BOOT调用 Linux 内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到 MEM_START+0x8000地址处。在跳转时,要满足下列条件: a) CPU寄存器的设置:R0=0;R1=机器类型 ID,本系统的机器类型ID=193。R2=启动参数标记列表在RAM中的起始基地址; b) CPU模式:必须禁止中断(IRQs和FIQs);CPU必须工作在SVC模式; c) Cache和MMU的设置:MMU 必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭。 系统采用下列代码来进入内核函数: theKernel = (void (*)(int, int))ntohl(hdr->ih_ep); theKernel(0, bd->bi_arch_number);其中,hdr是image_header_t类型的结构体,hdr->ih_ep指向内核的第一条指令地址,即Linux操作系统下的/kernel/arch/arm/boot/compressed/head.S汇编程序。theKernel()函数调用应该不会返回,如果该调用返回,则说明出错。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2184 浏览 6 评论
1985 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4543 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:31 , Processed in 0.806458 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号