找回密码
 注册
关于网站域名变更的通知
查看: 292|回复: 2
打印 上一主题 下一主题

转——在SoCEDS环境下编译和更新preloader和uboot程序的方法 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-22 07:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——在SoCEDS环境下编译和更新preloader和uboot程序的方法
3 Q2 L6 m& |, R- z
* d  o6 a* W6 ]6 T& D& q
: {- w" T4 }" A
前面有介绍preloader在HPS boot过程中的的作用,接下来讲述下用户在SoCEDS环境下改如何编译preloader和uboot程序!以及如何去更新BOOT SD卡中的preloader和uboot!

3 j+ m+ Y" i5 T从Terasic网站下下载的SD image是在13.1环境下编译出来的preloader和u-boot,这里会在14.0环境下重新编译并更新到SD卡中!并在inux系统下更新preloader和u-boot到SD卡中。(嵌入式linux 开发的还是需要一台linux 机器的,不管是虚拟机还是单独的linux系统机器!特别的在Compile linux kernel的时候)使用Quartus 14.0打开DE1_SoC_ghrd工程,进入Qsys打开HPS器件。相对于13.0主要变化是有了HPS Clocks窗口分为了Input Clocks 和Output Clocks!对比如下图:

0 Z- Y$ Q* e6 j) {9 j8 I  d
Quartus 13.0 HPS Clocks窗口
2 x) i/ j- p# W) K* U5 |9 A3 n  {
Quartus 14.0 HPS Clocks窗口

8 C# i! g  G3 u) T8 u* @& x14.0
软件中Cyclone V 器件MPU 默认时钟为925Mhz,而13.1版为800M。这里编译不改变MPU的Clock,所以去掉usedefault MPU clock frequency选项!不用改其他的选项,Clock即为800MHz。重新generate 关闭就好了。使用Quarut编译编译完成后会有hps_isw_handoff中的文件会更新,这些文件时连接HPS硬件配置与preloaderr软 件接口文件。

! b' |+ G2 V0 q8 ]4 ]6 @打开14.0中的command shell把工作目录转换到ghrd中,使用make -j8 sof开始编译硬件。(-j8 选项可以不带,只是为了多打开几个线程编译比较快,但是需要四核的CPU支持)。
: i1 X! M, Q9 H" j+ c: T9 `8 }
使用bsp-editor.exe打开bsp-editor工具,选择file->New BSP。把Preloader settingdirectory指定为ghrd中的hps_isw_handoff/soc_system_hps_0。点击OK关闭。再点击Geneate生成BSP后exit BSP Editor。此时应该可以在GHRD中看到software目录了。接下来需要注意的是要把GHRD中的makefile用\embedded\examples\hardware\cv_soc_devkit_ghrd的Makefile换掉(13.0下编译不用替换)。然后使用 make uboot 命令会把preloader 和uboot文件都编译出来。如果只需要编译preloader,就使用make prelaoder好了。过程比较漫长,这里会重新编译一遍硬件工程。

, H( @! Z. Z+ e$ }9 w" P" h编译完成后在software\preloader\uboot-socFPGA 目录下会找到u-boot.img文件,在software\preloader\uboot-socfpga\spl下会找到u-boot- spi.bin。为了方便,在GHRD下建立目录preloader,把这两个文件复制到该目录!
2 D* y6 F% @& f# ?/ J3 L4 Nu-boot-spi.bin为binary格式的文件,按照Altera的要求要按照特定格式添加文件头!需要使用到的工具为mkpimage工具。切 换工具目录为刚刚建立的preloader目录,使用命令mkpimage -o preloader_de1_soc.img u-boot-spl.bin 。此时文件夹下会产生一个preloader_de1_soc.img。 可以用于更新SD image中的preloader。
; \& }2 a) [1 z. e! w& D- v
1 x9 U! m$ H% o' E+ U6 y. @———————————————————————————————————————————————————6 H, d6 z- f; D( N/ v0 {$ X
在更新之前,还是先说SoCEDS14.0中的一个工具alt-boot-disk-util.exe。在Command Shell 中输入这个名称就可以看见使用方法。
) e5 ~5 D, _% S8 [/ q( ]#Wirte BOOTLoader and PREloader to disk driver 'E'1 ?. l$ l. J; E1 V( e
  alt-boot-disk-util -p preloaer -b bootloader -a write -d E
; R! i3 p( {$ Q% w, {1 j2 z5 N) {我的SD Card 被识别为I盘,所以我使用的命令为:
# e7 Z) P! i( N7 ^5 f" `1 a5 Y8 zalt-boot-disk-util -p preloaer_de1_soc.img -b u-boot.img -a write -d I5 E1 F5 f+ Z) }+ u2 Q
不给我目前使用都会遇到device open error的错误。不知道是环境问题还是其他原因。所以还是在Linux 系统下去更新preloader。
5 a3 T2 V7 V, h4 V, n$ F8 Y+ }, S————————————————————————————————————————————————————% i, S# Q. ?8 O. {$ y5 W

5 w/ [" h2 Q8 M6 W7 j(个人使用的ubuntu linux 机器,其他版本应该类似)
( J" Q7 E3 i# q! h+ g* q把两份文件复制到linux 机器上,并挂载启动SD card。使用fisk -l 查看SD card 对应的节点编号。比如我的SD card 为8G,会看到这样的一条信息:Disk /dev/sdb: 7948 MB, 7948206080 bytes 。说明这个节点为 /dev/sdb。
5 i5 a* H$ K; p$ d7 n) V. Flinux 工作目录切换到preloader放置的地方后。分别使用下面两条命令更新preloader和 uboot。
. R: P) X/ y/ v2 I
  • sudo  dd if=preloader_de1_soc.img of=/dev/sdb3 bs=64k seek=0
  • sudo  dd if=u-boot.img of=/dev/sdb3 bs=64k seek=4
    ' t, d- W* C- s( H3 s" B! v- {

2 b) U+ y' p4 o( F$ S" [7 N: N

) v1 k3 U1 C# H; V
0 Z( u) x6 |9 t+ ~6 J
再使用下sudo sync 命令就可以弹出SDcard 了。
! Z) [7 v7 K: [+ j0 X9 i使用这张SD boot,你会发现打印出Clock 相关的信息。这个是14.0中添加的打印。另外注意到时间戳应该与编译时间对应

- c0 _( n4 ~1 G& x

该用户从未签到

3#
发表于 2019-4-22 17:31 | 只看该作者
thanks for sharing
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 23:27 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表