蜗窝科技

[x-project tiny210] tiny210操作说明

蜗窝讨论区存档 · X Project · 楼主 ooonebook · 2016-09-10 · 10 帖

本文是原「蜗窝讨论区」的历史存档(2016-09-10),来自版块「X Project」,共 10 帖。讨论区已停止服务,此处仅供查阅。

ooonebook · 2016-09-10 23:40

声明:s5pv210在该uboot和kernel版本上已经支持得很好了,所以改的代码很少,主要是一些简单的移植操作和部署。目前可以启动到command line位置。 在此感谢wowo的无私指导。

一、准备操作 1、代码 github下载地址: build:https://github.com/wowotechX/build.git uboot:https://github.com/wowotechX/u-boot.git kernel:https://github.com/wowotechX/linux.git tools:https://github.com/wowotechX/tools.git (1)git clone下载以上代码到同一目录下。 (2)注意:由于tiny210没有合到主分支上,上述所有都需要切换到tiny210分支上,命令如下: git checkout --track origin/tiny210 2、编译器 (1)进入build目录。 (2)在config.mk中配置如下(在tiny210分支上已经是默认了) (3)执行“make env_prepare” 会下载arm-none-linux-gnueabi-4.8编译器。在tiny210编译的过程中,都使用这个编译器。 3、软件 在制作ramdisk的过程中,需要安装genext2fs、gzip命令,可以通过apt-get install进行安装。 (1)ubuntu环境下安装genext2fs sudo apt-get install genext2fs (2)ubuntu环境下安装gzip sudo apt-get install gzip

二、编译操作 以下都是在build目录下进行操作. 在config.mk中配置如下(在tiny210分支上已经是默认了): 1、uboot 执行“make uboot” 生成 out/u-boot/u-boot.bin out/u-boot/spl/u-boot-spl.bin out/u-boot/spl/tiny210-spl.bin

2、kernel、dtb 执行“make kernel” 生成 out/linux/arch/arm/boot/Image out/linux/arch/arm/boot/zImage out/linux/arch/arm/boot/dts/s5pv210-tiny210.dtb

3、rootfs tools/common/rootfs中就是根文件系统的一些东西。但是刚拉下的代码中busybox还是空的。 (1)执行“make busybox” 在rootfs中安装busybox (2)在config.mk中配置要生成的rootfs的格式为ramdisk 执行“make rootfs” 生成 out/rootfs/ramdisk.img out/rootfs/ramdisk.gz

4、legacy_uimage (0)如果需要生成传统格式的uimage,需要在config.mk中配置如下: (1)执行“make kernel-img” 生成 out/linux/arch/arm/boot/uImage

5、fit_uimage (0)如果需要生成FIT格式的uimage,需要在config.mk中配置如下: (1)执行“make kernel-img” 生成 out/xprj_uImage.itb 注意:4、5只需要根据uImage的格式选择其中一种。legacy_uimage是在zImage加上uboot使用的64B的头部。fit_uimage则是组合了Image(zImage)、ramdisk、dtb的镜像,uboot会对其进行解析。具体请参考wowo的《u-boot FIT image介绍》《X-011-UBOOT-使用bootm命令启动kernel(Bubblegum-96平台)》两篇文章

三、烧录操作 以下都是在tools/samsung/tiny210目录下操作。 需要先执行“sudo fdisk -l”看看sdb是否已经存在,保证sdcard已经被挂载上了。

0、使用SDcard来存放镜像 SDcard部署如下(扇区): spl: SEC_UBOOT_SPL=1-48(29KB) uboot: SEC_UBOOT=49-1072(512KB) legacy_uimage: SEC_UIMAGE=1073-5168(2MB) dtb: SEC_DTB=5169-5296(64KB) ramdisk: SEC_ROOTFS=5297-13488(4MB) fit: SEC_FIT_IMAGE_START=13489

1、uboot 需要保证上述<二、1><二、4>步骤完成 ./flash_sdcard.sh uboot 会烧写spl.bin和uboot.bin到SDcard对应位置上。

2、kernel(legacy_uimage)& dtb 需要保证上述<二、2>步骤完成 ./flash_sdcard.sh kernel 会烧写legacy_uimage和dtb到SDcard对应位置上。

3、rootfs(ramdisk) 需要保证上述<二、3>步骤完成 ./flash_sdcard.sh rootfs 会烧写ramdisk到SDcard对应位置上。

4、fit-image 需要保证上述<二、5>步骤完成 ./flash_sdcard.sh fit_image 会烧写fit uimage到SDcard对应位置上。

四、启动操作 插入SD card到tiny210的板子上,将模块开关切换到SDBOOT模式,也就是从sdcard上加载spl的模式。 0、目前为了开发方便,在uboot中已经实现自动将镜像复制到ddr的对应位置上。 也就是说无需输入其他命令来复制镜像到ddr上。 ddr的部署如下: legacy_uimage:0x20008000 dtb:0x22000000 ramdisk:0x21000000 fit_image:0x30000000

1、通过uimage、ramdisk、dtb启动kernel(也就是通过传统的uImage来启动kernel) 需要保证<三、1><三、2><三、3>步骤完成 在uboot的command line中,执行 “bootm 0x20008000 0x21000000 0x22000000” 到这里,kernel就跑起来了并且跑到了kernel的command line中。

2、通过fit_uimage的方式来启动kernel(也就是通过FIT格式的uImage来启动kernel) 需要保证<三、4>步骤完成 在uboot的command line中,执行 “bootm 0x30000000” 到这里,kernel就跑起来了并且跑到了kernel的command line中。

wowo · 2016-09-20 09:33

Hi ooonebook,

我在bubblegum上验证过你提交的自动生成its文件的脚本了,是Okay的。 不过我思前想后,觉得这些自动生成的脚本有点复杂(我都要看一段时间才能理清其中的逻辑),这有违我们的初衷。 我觉得,编译脚本应该尽量直白、易懂,不要给使用者造成任何额外的负担。因此,还是把its按照板子拆开为不同的文件了,提交如下: https://github.com/wowotechX/build/commit/19b226ed04658ae2dde27dc3aaeedcb61b823e37

你帮忙review一下,看看是否合理、易用?

ooonebook · 2016-09-21 16:28

wowo 写道: Hi ooonebook,

我在bubblegum上验证过你提交的自动生成its文件的脚本了,是Okay的。 不过我思前想后,觉得这些自动生成的脚本有点复杂(我都要看一段时间才能理清其中的逻辑),这有违我们的初衷。 我觉得,编译脚本应该尽量直白、易懂,不要给使用者造成任何额外的负担。因此,还是把its按照板子拆开为不同的文件了,提交如下: https://github.com/wowotechX/build/commit/19b226ed04658ae2dde27dc3aaeedcb61b823e37

你帮忙review一下,看看是否合理、易用?

嗯嗯,是比较易用。 当时做这些脚本的目的是为了兼容,比如传统uImage和FIT的兼容(这个确实不重要,可以统一规定用FIT即可)。 还有rootfs的类型的兼容,比如基于ram的根文件系统还分成initramdisk和initramfs的兼容,更何况还有yaffs,yaffs2,ext等其他根文件系统的类型。 使用mkrootfs脚本的话,直接在config.mk里面配置rootfs的类型即可。 另外,its文件中也包含ramdisk信息,也有可能如果说换rootfs类型就去修改its的话,个人感觉比较麻烦,因为如果后续使用yaffs,yaffs2,ext根文件系统的话是不需要使用ramdisk,又要去修改its了。之后移植rootfs的话你可能会发现这个问题的。

现在主要是两个脚本: mkkernelimg.sh:制作uImage镜像或者FIT镜像,如果是FIT镜像则自动生成its文件。 mkrootfs.sh:根据config.mk中配置的根文件系统类型来生成对应的根文件系统镜像。我觉得这个还是有必要的,毕竟根文件系统并不局限。 一些变量直接就从config.mk里面提取。

而且个人觉得,脚本存在的目的,就是为了省掉一些重复或者繁琐的工作,使用者其实只需要会使用即可,并不需要去弄懂里面的逻辑的,不过逻辑写得不清楚确实是我写脚本的问题哈哈~~

另外,我这边整理了ramdisk根文件系统的文章了,如何发给你看一下呢?

wowo · 2016-09-21 17:14

ooonebook 写道:

当时做这些脚本的目的是为了兼容,比如传统uImage和FIT的兼容(这个确实不重要,可以统一规定用FIT即可)。

这个兼容应该好做,保留下来不会增加多少复杂度。

ooonebook 写道:

还有rootfs的类型的兼容,比如基于ram的根文件系统还分成initramdisk和initramfs的兼容,更何况还有yaffs,yaffs2,ext等其他根文件系统的类型。 使用mkrootfs脚本的话,直接在config.mk里面配置rootfs的类型即可。 另外,its文件中也包含ramdisk信息,也有可能如果说换rootfs类型就去修改its的话,个人感觉比较麻烦,因为如果后续使用yaffs,yaffs2,ext根文件系统的话是不需要使用ramdisk,又要去修改its了。之后移植rootfs的话你可能会发现这个问题的。

这个我有疑问:这些不同的类型需要.its知情吗?正好可以借助你的文章学习一下
我理解的是,一个itb中应该包含kernel、dtb、ramdisk、rootfs四种image,至于这些image的格式是什么,怎么生成的,它不应该关心:-)

ooonebook 写道:

另外,我这边整理了ramdisk根文件系统的文章了,如何发给你看一下呢?

你有博客的账号吗?直接发出来就行了,群众的眼睛是雪亮的,可以帮我们检查

ooonebook · 2016-09-22 09:47

wowo 写道:

这个我有疑问:这些不同的类型需要.its知情吗?正好可以借助你的文章学习一下
我理解的是,一个itb中应该包含kernel、dtb、ramdisk、rootfs四种image,至于这些image的格式是什么,怎么生成的,它不应该关心:-)

准确的是说kernel、dtb、ramdisk三种image,ramdisk就是指rootfs的镜像, 因为基于ram的根文件系统有initrd(也就是所说的ramdisk)和后面的initramfs两种方式,在生成的镜像名称上面加以区分了,你可以看我刚提交的记录。 所以its的ramdisk节点要知道是使用哪个镜像,另外,如果后期不去使用ramdisk根文件系统,而使用其他根文件系统,那么its里面的ramdisk节点也要去删掉,否则编不过。就觉得比较灵活一点,不需要去修改its文件。像使用那个自动生成之后,不论使用哪种根文件系统都不需要去修改its了。 其实还有个重要的问题,也就是你文章中的kernel的load地址。我记得你之前有一个想法就是把所有需要配置的东西都放在config.mk里面。我觉得这样的思路后续其他平台的移植也会更简单一点。

另外,mkrootfs.sh这个脚本确定不保留吗,后面rootfs的镜像的格式很多,感觉需要兼容的。

ramdisk根文件系统的文章发表到博客上了,有空的话还麻烦指点下
http://blog.csdn.net/ooonebook/article/details/52624481

wowo · 2016-09-22 21:51

ooonebook 写道:

wowo 写道:

这个我有疑问:这些不同的类型需要.its知情吗?正好可以借助你的文章学习一下
我理解的是,一个itb中应该包含kernel、dtb、ramdisk、rootfs四种image,至于这些image的格式是什么,怎么生成的,它不应该关心:-)

准确的是说kernel、dtb、ramdisk三种image,ramdisk就是指rootfs的镜像, 因为基于ram的根文件系统有initrd(也就是所说的ramdisk)和后面的initramfs两种方式,在生成的镜像名称上面加以区分了,你可以看我刚提交的记录。 所以its的ramdisk节点要知道是使用哪个镜像,另外,如果后期不去使用ramdisk根文件系统,而使用其他根文件系统,那么its里面的ramdisk节点也要去删掉,否则编不过。就觉得比较灵活一点,不需要去修改its文件。像使用那个自动生成之后,不论使用哪种根文件系统都不需要去修改its了。 其实还有个重要的问题,也就是你文章中的kernel的load地址。我记得你之前有一个想法就是把所有需要配置的东西都放在config.mk里面。我觉得这样的思路后续其他平台的移植也会更简单一点。

另外,mkrootfs.sh这个脚本确定不保留吗,后面rootfs的镜像的格式很多,感觉需要兼容的。

ramdisk根文件系统的文章发表到博客上了,有空的话还麻烦指点下
http://blog.csdn.net/ooonebook/article/details/52624481

是的,你说的很对,所以我们才这么纠结 mkrootfs.sh这个脚本是要保留的,我只是在主分支里面没法验,因此就没有同步。后面会加上来的。 其它的,没关系,不急,一点一点来,会有办法的。 你的文章写的很有条理,我能看明白 :cool: 相比之下,rootfs的生成,应该内容比较多,方法也比较多。

wowo · 2016-09-30 08:49

Hi ooonebook, 我参考你在tiny210分支上的脚本,写了一个脚本,可以把config.mk转换成C语言的头文件,然后可以被.its、u-boot、kernel等各个模块的代码使用。 这个方法稍微简单、直观一些,可以解决我们讨论的大部分的问题。于此同时,也可以保持x project编译脚本的一致性,即:


[== Undefined ==]
                                |--->script
                                |--->.its->.itb
config.mk------>Makefile--------|--->u-boot
                                |--->kernel
                                |--->ramdisk
                                |....

最终达到我们的目标:由config.mk总控所有的一切行为。

提交记录如下: https://github.com/wowotechX/build/commit/765988b92eecbc8bb689669001ea7c3a2fbbda82

麻烦帮忙检查、改进一下。 多谢了~~~~

ooonebook · 2016-10-09 10:12

wowo 写道: Hi ooonebook, 我参考你在tiny210分支上的脚本,写了一个脚本,可以把config.mk转换成C语言的头文件,然后可以被.its、u-boot、kernel等各个模块的代码使用。 这个方法稍微简单、直观一些,可以解决我们讨论的大部分的问题。于此同时,也可以保持x project编译脚本的一致性,即:


[== Undefined ==]
                                |--->script
                                |--->.its->.itb
config.mk------>Makefile--------|--->u-boot
                                |--->kernel
                                |--->ramdisk
                                |....

最终达到我们的目标:由config.mk总控所有的一切行为。

提交记录如下: https://github.com/wowotechX/build/commit/765988b92eecbc8bb689669001ea7c3a2fbbda82

麻烦帮忙检查、改进一下。 多谢了~~~~

hi,wowo 写得很清晰易懂,学习到了~:D

xiaoloudongfeng · 2017-01-20 11:12

hi,ooonebook 手头有一块tiny210v2,看了你的文章,也下定决心跟进一下Xproject,目前也已经能到cmdline了,但是在移植dm9000网卡的时候遇到了问题,不知你是否移植成功,能否分享一下相关经验?多谢了!

ooonebook · 2017-02-05 10:40

xiaoloudongfeng 写道: hi,ooonebook 手头有一块tiny210v2,看了你的文章,也下定决心跟进一下Xproject,目前也已经能到cmdline了,但是在移植dm9000网卡的时候遇到了问题,不知你是否移植成功,能否分享一下相关经验?多谢了!

不好意思啊,还没去移植dm9000