标签 - u-boot

u-boot kernel    2017-03-02 10:12:13    121    0    0

造成这个错误的原因有多少我不知道

google了一下

说内核设置小了 所以u-boot读取内核不完整导致失败了

还有说是nand bad (nand坏快引起的)

还有的是启动引导参数设置不正确导致的

还有的是 机器ID不一致导致的(u-boot机器ID和linux 内核默认的机器ID不一直)

尼马我都试了还是不行 

然后回头又看了看启动的信息

基本上是坏快的原因了 因为坏快产生在了内核引导的地址 而内核貌似不检查这些 

所以。。。。。悲剧了~

这是我移植之后内核设置6M的一大原因吧!具体是不是这个原因得回去试试~

参考:

http://processors.wiki.ti.com/index.php/Writing_Kernel_Image_to_NAND_Flash

http://www.denx.de/wiki/DULG/UBootCmdGroupNand

http://www.voidcn.com/blog/fu851523125/article/p-6182227.html

http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=753&highlight=%BB%B5%BF%E9

bdinfo信息

SMDK2440 # bdinfo
arch_number = 0x000000C1
boot_params = 0x30000100
DRAM bank   = 0x00000000
-> start    = 0x30000000
-> size     = 0x04000000
eth0name    = dm9000
ethaddr     = 00:50:56:C0:00:08
current eth = dm9000
ip_addr     = 192.168.0.110
baudrate    = 115200 bps
TLB addr    = 0x33FF0000
relocaddr   = 0x33F29000
reloc off   = 0x00529000
irq_sp      = 0x33B28EF0
sp start    = 0x33B28EE0

重新设置机器ID:​

SMDK2440 # set mancid 16a
SMDK2440 # save 
SMDK2440 # reset​
。。。。。。。。。
*
u-boot    2017-02-27 19:50:10    206    0    0

看了韦东山视频的0基础部分 没有购买收费视频 

中间停了一段时间 在看C++

然后又开始直接看得还是免费的 不过是毕业班那一系列的了

然后网上各种的看资料

基本思路知道了

移植过程最初很无语

汇编  Makefile语法是一大关卡

这东西就像车 即使您不会 摸多了自然也会开

之前我还看了一本Makefile的书 

真看到这种软件的Makefile尤其是内核和android那样的 头大~

不过 在各种莫名其妙的问题里面也是不断积累的一个过程

。。。。。。。。。。。。。。。。

一个星期!

还不是很确定nand能不能完全读写

2016.11版本代码改了好多好多。。。。

移植过程make中错误:

LD      lib/built-in.o
  LD      u-boot
common/built-in.o: In function `usb_stop':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:144: undefined reference to `usb_lowlevel_stop'
common/built-in.o: In function `usb_submit_int_msg':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:204: undefined reference to `submit_int_msg'
common/built-in.o: In function `usb_control_msg':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:240: undefined reference to `submit_control_msg'
common/built-in.o: In function `usb_bulk_msg':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:274: undefined reference to `submit_bulk_msg'
common/built-in.o: In function `usb_init':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c
u-boot    2017-02-23 22:02:53    188    0    0

折腾两天

本打算移植一下2015版本的 结果移植失败 串口无法显示信息 内核也启动不了 

看来没有看收费视频还是有点差距的

改天看看那个补丁文件到底差别在那儿

另外现在u-boot代码变化和之前的差多了。。。。。。。。。。

所以只能在原来基础上修改一下了 谁让现在内核裁剪还那么费劲呢!


uboot里的kernel分区默认为2M改为8m

修改分区如下,建议留给kernel8M大小:

0.补丁打上:

cd /var/s3c2440-src/u-boot-1.1.6/
patch -p1 < ../u-boot-1.1.6_jz2440.patch 

第一步 :在配置文件include/config/smdk2410.h 里面有一个宏定义

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \ 
 "128k(params)," \ 
 "2m(kernel)," \ 
 "-(root)"​

把上面的2M改为8M(改好后重新编译uboot),根据kernel启动信息看还得把128kb改成255kb
/*kernel分区默认为2M改为8m*/

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:256k@0(bootloader)," \
				"128k(params)," \
				"8m(kernel)," \
				"-(root)"


启动之后默认是这样的 还没有改过来

OpenJTAG> mtd ​
 device nand0 <nandflash0>, # parts = 4 
 #: name size offset mask_flags 
 0: bootloader 0x00040000 0x00000000 0 
 1: params 0x00020000 0x00040000 0 
 2: kernel 0x00200000 0x00060000 0 
 3: root 0x0fda0000 0x00260000 0 
 
 active partition: nand0,0 - (bootloader) 0x00040000 @ 0x00000000 
 
 defaults: 
 mtdids : nand0=nandflash0 
 mtdpar
u-boot    2017-02-19 11:00:32    92    0    0

交叉编译工具:

友善之臂的 arm-linux-gcc-4.5.1

在顶层Makefile文件里面添加

ARCH=arm
CROSS_COMPILE ?= arm-linux-
cd u-boot-2015.10/
 vim Makefile
 make smdk2410_config
 make

这里测试通过 不过编译出来的文件是不能用的

 

==============================================

昨天搞了一天不知道为嘛添加单板后报错

然后各种的找原因~~~~~~~

 

>make smdk2440_config
	make[1]: *** No rule to make target 'board/samsung/smdk2440/smdk2440.o', needed by 'board/samsung/smdk2440/built-in.o'。 停止。
	Makefile:1196: recipe for target 'board/samsung/smdk2440' failed
	make: *** [board/samsung/smdk2440] Error 2

 

报出这种错误一般就是文件名字还有路径什么的不匹配

找出board/samsung/smdk2440/相关的文件依赖还有头文件定义


最初我还以为是Makefiel写的脚本原因 各种的找 找 找

找了一天 看了一些关于u-boot的Makefile编译流程和分析 

最后结果就集中到了脚本生成的相关文件上

在脚本目录里面找来找去也看不出毛病在那儿~

===========================================这里是部分寻找过程

>grep "built-in.o" -nR > built-in.txt

		board/samsung/smdk2410/.built-in.o.cmd:1:cmd_board/samsung/smdk2410/built-in.o :=  arm-linux-ld     -r -o 
		board/samsung/smdk2440/.built-in.o.cmd:1:cmd_board/samsung/smdk2410/built-in.o :=  arm-linux-ld     -r -o 

这里很明显 在两个不同的目录下脚本自动生成