zedboard移植(uboot配置PL侧,uEnv.txt中设置变量,DTB取消chosen,rootfs挂载到SD卡EXT4分区)

官方镜像在zedboard上可以跑通。
然后进行修改工作。
(1)修改uboot。
下载uboot2013.4,修改zynq_common.h和zynq_zed.h。
使之加载PL侧bit文件。
(2)生成boot.bin
抽取官方的zynq_fsbl.elf和自己生成的uboot_2013_4.elf。
利用bootgen工具和BIF文件,用BAT脚本生成BOOT.bin。
(3)修改uEnv.txt
加入自定义的环境变量。
重新定义内存布局。
加入bootargs。可以选择从RAMDISK启动还是从SD卡第二分区启动。

如果选择从RAMDISK启动,那么可以使用KERNEL的默认参数:
bootargs=console=ttyPS0,115200 root=/dev/ram rw initrd=0x800000,8M earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0

如果选择从SD卡第二分区加载,那么可以使用:
bootargs=console=ttyPS0,115200n8 noinitrd
root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait

(4)解压拷贝rootfs到SD卡第二分区
GUI下反键操作,解压。
mount -o loop,挂载到一个tmp文件夹。
打开tmp,把所有文件拷贝到SD卡第二分区中。
GUI下反键操作,umount。

(5)修改DTS.
加入chosen中的bootargs。
由于Kernel中的bootcmdline不为空,所以不能从UBOOT的bootargs环境变量中读取启动参数。
只有DTB中的chosen能够覆盖kernel中的bootcmdline。
生成DTB,从第二分区加载rootfs。
bootargs=console=ttyPS0,115200n8 noinitrd
root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait

(6)修改/etc/init.d/rcS
系统启动后,rootfs挂载SD卡上,写入的数据不会因为掉电而丢失。
我们把需要在启动初始化时完成的工作,写入脚本/etc/rcS中。
例如
ifconfig eth0 192.168.1.166

(7)修改oled的显示内容
整个rootfs是一个busybox做成的。
通过vi查看,可以发现,
read_sw,write_led,load_oled,unload_oled,这些都是脚本文件。
但是logo.bin是二进制文件。
通过tftp上传到PC上分析这个logo.bin。
利用HEX EDITOR,修改logo.bin的内容,可以观察到oled的显示规律。
发现,OLED的点阵打印的排列规则是,
每8个点为一个单位,坐标从y0~y7。每一位决定一个点的亮灭。
共有512个bytes。每一个BYTE,在x轴占一个坐标。
x轴到顶后,x轴回到原位。y轴向上生长,即y轴从y8~y15。
x轴点数为128,y轴点数为32。
也就是说,共有128*4个bytes。
为了显示自己的内容,画一个128*32的表格,将需要点亮的点做出标记,就可以得到我们要的值。
利用HEX EDITOR可以生成bin文件。

zedboard移植(uboot配置PL侧,uEnv.txt中设置变量,DTB取消chosen,rootfs挂载到SD卡EXT4分区)_第1张图片
zedboard移植(uboot配置PL侧,uEnv.txt中设置变量,DTB取消chosen,rootfs挂载到SD卡EXT4分区)_第2张图片

zedboard移植(uboot配置PL侧,uEnv.txt中设置变量,DTB取消chosen,rootfs挂载到SD卡EXT4分区)_第3张图片
点阵的好处在于,可以自己自由绘画。
Mark一下自己的成果。

(8)修改prompt。
#vi /etc/profile
修改:
export PS1="\e[0;31mzynq-huskar>\e[m"

你可能感兴趣的:(linux)