最早使用firefly的开发板,但是模块内存容量小,就在咸鱼上买了一个没有技术支持,没有图纸的模块,模块SDRAM 4G,EMMC 32G,有hdmi,网络接口,安装了andriod系统。
rk3399性能很强,支持4k视频,一堆usb、iic、千兆网络、pcie…除了散热要求外,其他都不错。
第一个帖子,先把我失败的第一步过程分享,说不定有人能走下去。
最初,想直接把firefly-rk3399的linux移植过了使用就可以,但这条路没有走通,不知道那里出问题。大概是emmc驱动问题。就差最后一步放弃了,有知道问题的可以告诉我。
采用方法:
1、分离dtb文件。
采用AndroidTool_Release_v2.71 读出recorver.img,boot.img.
分离的second再解开,更换里面的rk-kernel.dtb
../../kernel/scripts/resource_tool --verbose --unpack --image=second
采用解包工具解出dtb文件,rk-kernel.dtb.
../kernel/scripts/unpack_bootimg --boot_img recovery.img
生成的文件在out目录下面。
2、反编译dtb文件
dtc -I dtb -O dts -o file.dts rk-kernel.dtb
3、修改dts,并编译成为dtb文件
修改的主要删除有关,andriod的部分,如fireware,启动chosen等。
dtc -I dts -O dtb -o rk-kernel.dtb file.dts
4、重新打包
把修改的dtb文件,覆盖原dtb文件
cp ../rk-kernel.dtb out/rk-kernel.dtb
生成second文件
"打包 second文件"
…/…/kernel/scripts/resource_tool --verbose --pack --image=second out/logo.bmp out/rk-kernel.dtb
继续把second 打包为img文件。
“打包新的recovery.img”
…/…/kernel/scripts/mkbootimg --kernel kernel --ramdisk ramdisk --second second -o recovery.img
同样方法更换boot.img
复位后就可以运行了。
运行的结果:
问题是只要增加emmc的arason驱动,就会卡死,删除emmc firefly的操作系统就可以起来,但是rootfs用不了。也就是不行。大家看看,linux起来了。可是文件系统不行。
[ 9.311381] using random host ethernet address
[ 9.314457] Mass Storage Function, version: 2009/09/11
[ 9.314918] LUN: removable file: (no medium)
[ 9.334636] read descriptors
[ 9.334907] read strings
Ui upgrade
recovery filesystem table
=========================
0 (null) /tmp ramdisk (null) (null) (null)
1 /dev/root / ext2 rw,noauto 0 1
2 proc /proc proc defaults 0 0
3 devpts /dev/pts devpts defaults,gid=5,mode=620 0 0
4 tmpfs /dev/shm tmpfs mode=0777 0 0
5 tmpfs /tmp tmpfs mode=1777 0 0
6 tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
7 sysfs /sys sysfs defaults 0 0
8 debug /sys/kernel/debug debugfs defaults 0 0
9 pstore /sys/fs/pstore pstore defaults 0 0
10 /dev/block/by-name/misc /misc emmc defaults 0 0
11 /dev/block/by-name/oem /oem ext2 defaults 0 2
12 /dev/block/by-name/userdata /userdata ext4 defaults 0 2
buf = /dev/block/by-name/misc
### get mount_ponit = /dev/block/by-name/misc ###
stat /dev/block/by-name/misc try 1: No such file or directory
Starting input-event-daemon: input-event-daemon: Start parsing /etc/input-event-daemon.conf...
input-event-daemon: Adding device: /dev/input/event0...
input-event-daemon: Adding device: /dev/input/event1...
input-event-daemon: Adding device: /dev/input/event2...
input-event-daemon: Start listening on 3 devices...
done
/etc/init.d/rcS: line 28: alsactl: not found
[root@buildroot:/]# stat /dev/block/by-name/misc try 2: No such file or directory
stat /dev/block/by-name/misc try 3: No such file or directory
stat /dev/block/by-name/misc try 4: No such file or directory
stat /dev/block/by-name/misc try 5: No such file or directory
stat /dev/block/by-name/misc try 6: No such file or directory
stat /dev/block/by-name/misc try 7: No such file or directory
[ 16.851305] random: nonblocking pool is initialized
stat /dev/block/by-name/misc try 8: No such file or directory
stat /dev/block/by-name/misc try 9: No such file or directory
stat /dev/block/by-name/misc try 10: No such file or directory
stat /dev/block/by-name/misc try 4: No such file or director
y
-/bin/sh: stat: not found
[root@buildroot:/]# failed to stat /dev/block/by-name/misc
emmc_point is
sd_point is (null)
sd_point_2 is (null)
Recovery start....................
read cmdline
>>> Boot from non-SDcard
buf = /dev/block/by-name/misc
### get mount_ponit = /dev/block/by-name/misc ###
devices is not MTD.
stat /dev/block/by-name/misc try 1: No such file or directory
stat /dev/block/by-name/misc try 2: No such file or directory
stat /dev/block/by-name/misc try 3: No such file or directory
stat /dev/block/by-name/misc try 4: No such file or directory
stat /dev/block/by-name/misc try 5: No such file or directory
stat /dev/block/by-name/misc try 6: No such file or directory
stat /dev/block/by-name/misc try 7: No such file or directory
stat /dev/block/by-name/misc try 8: No such file or directory
stat /dev/block/by-name/misc try 9: No such file or directory
stat /dev/block/by-name/misc try 10: No such file or directory
有人告诉我是因为没有更换uboot里面的dtb导致的,我没有试,以后可以尝试一下。
中间解决的几个关键问题:
1、要猜测uart接口在那里,我用示波器把几个接口测试一下,很快解决问题。
2、由于烧写错误,导致uboot被清除,系统变砖头。通过查找emmc flash器件,最后我很幸运发现了,一个tp点(测试点),居然真的是emmc的进入maskroom的点,把它接地问题解决。非常幸运,一般如果不知道,那个是进入maskroom的点,模块就废了。
成功的过程后面帖子发!!!