[x-project tiny210] tiny210操作说明
本文是原「蜗窝讨论区」的历史存档(2016-09-10),来自版块「X Project」,共 10 帖。讨论区已停止服务,此处仅供查阅。
声明: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中。
Hi ooonebook,
我在bubblegum上验证过你提交的自动生成its文件的脚本了,是Okay的。 不过我思前想后,觉得这些自动生成的脚本有点复杂(我都要看一段时间才能理清其中的逻辑),这有违我们的初衷。 我觉得,编译脚本应该尽量直白、易懂,不要给使用者造成任何额外的负担。因此,还是把its按照板子拆开为不同的文件了,提交如下: https://github.com/wowotechX/build/commit/19b226ed04658ae2dde27dc3aaeedcb61b823e37
你帮忙review一下,看看是否合理、易用?
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根文件系统的文章了,如何发给你看一下呢?
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根文件系统的文章了,如何发给你看一下呢?
你有博客的账号吗?直接发出来就行了,群众的眼睛是雪亮的,可以帮我们检查
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
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的生成,应该内容比较多,方法也比较多。
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
麻烦帮忙检查、改进一下。 多谢了~~~~
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
hi,ooonebook 手头有一块tiny210v2,看了你的文章,也下定决心跟进一下Xproject,目前也已经能到cmdline了,但是在移植dm9000网卡的时候遇到了问题,不知你是否移植成功,能否分享一下相关经验?多谢了!
xiaoloudongfeng 写道: hi,ooonebook 手头有一块tiny210v2,看了你的文章,也下定决心跟进一下Xproject,目前也已经能到cmdline了,但是在移植dm9000网卡的时候遇到了问题,不知你是否移植成功,能否分享一下相关经验?多谢了!
不好意思啊,还没去移植dm9000
