|
一.preloader、Uboot生成以及烧写
1) 在SoC EDS中输入bsp-editor打开bsp编辑器
2) File->new bsp新建bsp,preloader settings directory设置至Project Directory\hps_isw_handoff\*_qsys_hps_0文件夹
3) 勾选BOOT_FROM_QSPI,并设置QSPI_NEXT_BOOT_IMAGE地址(默认0x60000),即需要将u-boot放置在0x60000起始的存储空间里
4) 在sofware\spl_bsp文件夹下make,生成preloader镜像preloader-mkimage.bin,make uboot在uboot-socfpga文件夹下生成u-boot.img。
5) 在EDS下使用usb-blaster将prelader和u-boot烧写进qspi flash。
a) Quatus_hps –c USB-Blaster –o PV -a 0 preloader-mkimage.bin
说明:-a即为写入的地址,quartus_hps工具要求写入文件名为.bin扩展
b) Quatus_hps –c USB-Blaster –o PV –a 0x60000 u-boot.img.bin
说明:将uboot.img重命名为u-boot.img.bin否则可能会出错
二. Linux kernel编译及烧写。 如果需要编译内核驱动或者增添裁剪内核,需要重新编译内核。
首先虚拟机联网。然后获取3.9版本内核,在虚拟机中解压。
1) Linux环境下安装所需要的开发包,以CentOS为例- Yum groupinstall “development”
- Yum install ncurses-devel ncurses
复制代码 2) 配置环境变量- Export ARCH=arm
- Export CROSS_COMPILE=arm-linux-gnueabihf-
复制代码 3) 到解压后的kernal目录,执行make socfpga_defconfig,目的是将内核按默认的socfpga参数进行配置。然后执行Make menuconfig 进入内核配置
4) Make
编译完成后,可以在arch/arm/boot 下找到编译好的zImage
关于kermal 与device tree的烧写qspi flash地址,可以在板子的boot阶段,通过printenv查看。
在boot阶段跟新Flash zimage步骤如下(提前打开tftpd32工具,将zImage放入basic directory)- Sf probe #加载flash模块
- Tftp 0x1000000 zImage #将zImage下载到内存16M位置
- Sf update 0x1000000 0xa0000 0x390000 #将内存16M开始的位置写到Flash 0xa0000的位置上
复制代码 也可以使用usb-blaster,在EDS command下,用jtag烧写到qspi flash,比较慢。- Quatus_hps –c USB-Blaster –o PV –a 0xa0000 zImage.bin
复制代码 三. 修改文件系统。可使用yocto工具生成根文件系统(参考RocketBoards.org中Using Yocto Source Package的叙述)。提供altera-gsrd-image-socfpga_cyclone5,altera-image-minimal-socfpga的压缩包。
制作jffs2文件系统- mkfs.jffs2 –r ./fs –o fs_minimal.jffs2 –e 0x10000 –pad=0x7000000 –n
复制代码 -r 文件系统源目录
-o 输出文件名
-e 擦除块大小,参照芯片手册,一般为64kB
--pad 目标文件大小
在boot阶段跟新Flash文件系统步骤如下- Sf probe #加载flash模块
- Tftp 0x1000000 xxx.jffs2 #将jffs2镜像下载到内存16M位置
- Sf update 0x1000000 0x1000000 0x7000000 #将内存16M开始的位置写到Flash 16M的位置上
复制代码 #Flash 大小为128M,后面112M为文件系统,在device tree中有定义
对于生成好的jffs2文件,也可以使用usb-blaster,在EDS command下直接烧写到qspi(特别慢,不提倡用)。先重命名为jffs2.bin,然后- Quatus_hps –c USB-Blaster –o PV –a 0x1000000 fs.jffs2.bin
复制代码 四.Device tree修改、编译及烧写。
1) 编译devicetree
Quartus工程编译好之后,有个device tree文件夹,有dts文件,即为device tree文件。修改其中的part0,part1。其中part1为文件系统的flash地址,定义为0x1000000,长度0x7000000.- part0: partition@0x0 {
- label = "Flash 0 Raw Data"; /* appended from boardinfo */
- reg = < 0x00000000 0x01000000 >; /* appended from boardinfo */
- }; //end partition@0 (part0)
-
- part1: partition@0x1000000 {
- label = "Flash 1 Root Filesystem"; /* appended from boardinfo */
- reg = < 0x01000000 0x07000000 >; /* appended from boardinfo */
- }; //end partition@800000 (part1)
- Windows在EDS下,Linux使用终端命令(首先安装dtc工具)
- Dtc –I dts –O dtb -o devicetree.dtb dtsfile.dts
- (-I –O分别为输入输出)
复制代码 使用usb-blaster,在EDS command下直接烧写到qspi
Quatus_hps –c USB-Blaster –o PV –a 0x50000 devicetree.dtb
五. 生成rbf文件以配置FPGA
Fileàconvert programming file
选择RawBinaryFile Mode选择Passive Parallel x8或者Passive Parallel x16.
选择SOF Data项,Add File ,浏览至编译好的sof文件。然后Generate
在Linux下配置FPGA
a) 编程 dd if=/home/root/output_file.rbf of=/dev/fpga0 bs=1M。可以将此命令写入脚本中。
b) 查看fpga状态: cat /sys/class/fpga/fpga0/status
Linux启动以后要确保启动f-h,h-s桥使能,配置fpga。
在Linux下配置FPGA。- dd if=/home/soc_system.rbf of=/dev/fpga0 bs=1M
- cat /sys/class/fpga/fpga0/status
- echo "enable bridges"
复制代码 使能f-h,h-f桥- echo 1 > /sys/class/fpga-bridge/fpga2hps/enable
- echo 1 > /sys/class/fpga-bridge/hps2fpga/enable
- echo 1 > /sys/class/fpga-bridge/lwhps2fpga/enable
复制代码 加载内核模块
Insmod xxx.ko 将内核模块加载到系统
Mknod /dev/xxx c 245 0 在 /dev/下创建设备文件节点。C 表示为字符设备;后面两项分别为主设备号和次设备号,可以在模块源码中查到。一般提供的内核模块(如i2c)在加载时会自动创建设备节点
六.启动脚本
一般Linux原始启动脚本在/etc/init.d中,并在rcX.d下建立符号链接。以start_work.sh为例可以通过以下方式加入启动脚本。
a) 将start_work.sh复制到/etc/init.d中。在/etc/init.d文件夹下可以看到所有的启动脚本,以及rcS脚本。rcS脚本中定义了启动脚本的runlevel为S,即将会依次执行/etc/rcS.d下的脚本。
b) 在rcS.d下建立指向start_work.sh的符号链接。/etc/rsS.d下的文件命名都为S+数字+名称的方式,文件名表明了该脚本会在何时加载执行。初始化分为00-99个阶段,我们可以把我们的脚本放在第九十几的阶段上。例如:
Ln -s /etc/init.d/startwork.sh /etc/rcS.d/S91startwork.sh
c) 这样启动时就会自动执行初始化脚本了
————————————————
版权声明:本文为CSDN博主「LakersNation」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LZY272942518/article/details/50923102 |
|