frankseu 发表于 2016-10-10 22:56:36

RK3288的内核烧录不生效,请各位帮忙看看什么原因?

本帖最后由 frankseu 于 2016-10-10 22:59 编辑

1 编译RK3288的Android4.4的内核,提示编译成功,正常生成kernel.img,我在内核中增加了一些打印日志;
内核img大小如图片所示, 6.3M不到一点:2 使用AndroidTool_Release_v2.35工具烧写内核,烧写时先默认烧写在0x0000E000的位置,提示如图2,“下载成功”,应该就是烧写内核成功了吧?
3 重启后发现,并没有我加入的打印日志,而且编译日期等信息也没有改变,因此确认新内核没有生效;
4 查日志显示:RK3288 Android4.4板子分区如下:
[    1.757367] mmcblk0: mmc0:0001 AGND3R 14.5 GiB
[    1.757684]      uboot: 0x000400000 -- 0x000800000 (4 MB)
[    1.757697]       misc: 0x000800000 -- 0x000c00000 (4 MB)
[    1.757707]   resource: 0x000c00000 -- 0x001c00000 (16 MB)
[    1.757717]   kernel: 0x001c00000 -- 0x002c00000 (16 MB)
[    1.757726]       boot: 0x002c00000 -- 0x004c00000 (32 MB)
[    1.757734]   recovery: 0x004c00000 -- 0x006c00000 (32 MB)
[    1.757743]   backup: 0x006c00000 -- 0x00a000000 (52 MB)
[    1.757752]      cache: 0x00a000000 -- 0x012000000 (128 MB)
[    1.757760]   kpanic: 0x012000000 -- 0x012400000 (4 MB)
[    1.757769]   system: 0x012400000 -- 0x042400000 (768 MB)
[    1.757778]   metadata: 0x042400000 -- 0x042800000 (4 MB)
[    1.757786]   userdata: 0x042800000 -- 0x082800000 (1024 MB)
[    1.757795] radical_update: 0x082800000 -- 0x086800000 (64 MB)
[    1.757804]       user: 0x086800000 -- 0x3a3a00000 (12754 MB)
[    1.757833]mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p141381..dw_mci_set_ios:no card.
[    1.764603] 1381..dw_mci_set_ios:no card.
[    1.784302] 1381..dw_mci_set_ios:no card.

因此将Flashtool烧写工具中的内核起始地址修改为:0x01C00000,烧写仍然提示正常。重启后还是没有我加入的打印日志,编译时间等仍然是公版的。
shell@rk3288:/ $ cat /proc/version
Linux version 3.10.0 (firefly@tchip-server) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #104 SMP PREEMPT Thu Feb 25 14:48:49 CST 2016

5 看打印日志, [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.Total pages: 522768[    0.000000] Kernel command line: console=ttyFIQ0 earlyprintk androidboot.hardware=rk30board androidboot.console=ttyFIQ0 board.ap_has_alsa=0 init=/initmtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00180000@0x00092000(system),0x00002000@0x00212000(metadata),0x00200000@0x00214000(userdata),0x00020000@0x00414000(radical_update),-@0x00434000(user) storagemedia=emmc loader.timestamp=2015-11-13_10:22:31 hdmi.vic=-1
[    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)

其中内核命令行中有内核地址是:0x00008000@0x0000e000(kernel),在Flashtool中将内核烧写地址修改为0x00008000,烧写仍然提示成功,但是仍然没有我加的打印日志。可见烧写内核没有生效。


请各位帮忙看看原因大概出在哪儿?折腾了几天时间。多谢了。






frankseu 发表于 2016-10-10 23:07:42

firefly的RK3288的板子,内核地址到底是从哪儿开始的呢?

guoke5 发表于 2016-10-10 23:28:02

本帖最后由 guoke5 于 2016-10-10 23:29 编辑

默认编译生成的boot.img是包含kernel的(boot.img大概12M),如果boot.img包含kernel,系统则会优先使用boot.img里面的kernel,因此你单独烧kernel.img是没有生效的。要想单独调试kernel,只刷kernel.img使你的代码生效,方法如下 :
使用./mkimage.sh withoutkernel 生成不带kernel的boot.img (boot.img大概2M), 先烧写不带kernel的boot.img, 之后就可以只烧kernel.img也能使你的代码生效了。

guoke5 发表于 2016-10-10 23:29:06

不需要修改内核地址,跟这个没关

frankseu 发表于 2016-10-11 21:16:17

那烧写通过mkimage制作的内核和boot版本,都不需要在FlashTool工具中修改烧录的起始地址吗?原因是系统启动时自动去寻找到boot和内核的吗?

frankseu 发表于 2016-10-13 22:01:56

这种方法已经可以了。
感谢!

guoke5 发表于 2016-10-13 23:32:06

frankseu 发表于 2016-10-11 21:16
那烧写通过mkimage制作的内核和boot版本,都不需要在FlashTool工具中修改烧录的起始地址吗?原因是系统启动 ...

各分区地址是由 parameter文件指定的,刷机的时候需要刷写parameter

Angel CL 发表于 2016-10-14 11:07:54

frankseu 发表于 2016-10-11 21:16
那烧写通过mkimage制作的内核和boot版本,都不需要在FlashTool工具中修改烧录的起始地址吗?原因是系统启动 ...

请问你是怎么处理的呢?我在烧录boot.img出现同样的问题。请指教。谢谢。

frankseu 发表于 2016-10-14 22:04:34

我烧写这个boot.img的时候没有修改地址,就默认FlashTool工具上的。按照上面人说的是有parameter文件指定的,那就跟此处没有关系了。

fengqingyangpro 发表于 2019-6-21 11:51:15

guoke5 发表于 2016-10-10 23:28
默认编译生成的boot.img是包含kernel的(boot.img大概12M),如果boot.img包含kernel,系统则会优先使用boo ...

烧写boot.img之后,RK3288无法正常启动,您有没有遇见同样的问题?
页: [1] 2
查看完整版本: RK3288的内核烧录不生效,请各位帮忙看看什么原因?