国产之路:复旦微调试笔记3:环境配置

简介: Xilinx:基本流程为逻辑在vivado中配置开发生成hdf,不带操作操作系统时直接用sdk在线或者参考之前固化篇,带操作系统时用petalinux配制,生成BOOT.bin(含fsbl,自己生成的bit文件和uboot)和image.ub(默认文件系统,kernel和设备树的打包)(如果用jffs2文件系统需要设置将文件系统单独出来,再生成一个rootfs.jffs2)

烧写步骤:

 Xilinx:基本流程为逻辑在vivado中配置开发生成hdf,不带操作操作系统时直接用sdk在线或者参考之前固化篇,带操作系统时用petalinux配制,生成BOOT.bin(含fsbl,自己生成的bit文件和uboot)和image.ub(默认文件系统,kernel和设备树的打包)(如果用jffs2文件系统需要设置将文件系统单独出来,再生成一个rootfs.jffs2)

 复旦微:基本流程为procise下生成hdf或者导入vivado的.bd和.xci文件,裸机正常用IAR软件,linux的话需要导出FSBL和设备树文件。设备树文件放置在linux编译环境中,build all,生成uboot和image.ub,将之前导出的FSBL文件,逻辑的bit文件,和刚刚生成的uboot文件image.ub打包成一个BOOT.bin烧录

开发环境

 和进口的芯片比,开发环境的变化

  需要用到三个软件,vivado ,procise,IAR 。

PL:

 (1)Procise:

  生成裸跑程序的bsp ,可以在export hardware 时选择多个裸跑模板,主要包括fsbl ,以及生成psoc 设备树的顶层,有基础的memory和lwip测试。

 (2)IAR :

  用来编译和调试裸跑应用程序的,因为 ps 是全新设计,外设地址和寄存器定义都 不同,ps 的裸跑bsp 完全重新设计的,所以完全不兼容xilinx的SDK。

  IAR+Procise的部分功能相当于xlinx的sdk

  (3)Vivado:

  主要和之前xilinx的一样,还是逻辑工程师配置pl侧的工具,可以生成bit,也可以用vivado 调试,但必须在独立模式下。

  from vivado 流程是为了方便移植现有的ps 工程,不用在procise 里重新配置

PS:

  Petalinux :主要用来生成pl.dtsi,利用vivado 里的hdf 生成pl.dtsi 文件。 会更新 device-tree/hwplatform/pl.dtsi 文件内容,它会根据 hdf 文件里的 PL 部分设计变化, 一般需要有寄存器访问的 IP 才需要生成 pl.dtsi,即需指定–hdf 参数。

 Petalinux 生成的文件系统可以在psoc 上使用,目前已经测试过2018.2 和2018.3 的

 文件系统可以在psoc 上运行。

  Linux 应用程序可以通过网口利用SDK 调试,这个调试也是兼容的

文档;

  DS101 和DS102 两个文档相当于xlinx的ug585。

  UG102 是差异文档。

  UG201 是硬件设计指导

  UG202 是软件设计指导开发文档,

内存大小

  Rootfs :buildroot 默认最小配置为9.8MB,如果要放到qspi flash 的话,可以jffs2 或者ubi 文件系统。

  Image.ub:4.9MB,包括zImage 和devicetree。

  Boot.bin:732KB,加环境变量空间大约1MB

  Bit: 不压缩的话大小13MB。

 总计大小:10MB+4.9MB+1MB+13MB=29MB,建议32MB

调试串口

 PS测共有两个调试串口,区别于xilinx的petalinux中简单直接的图形界面配置而言,FMQL更需要灵活去单独配置,一共有三个阶段的串口打印

Fsbl阶段:

 为了在 FSBL 中使用 UART1 来打印输出。

 第一步, 在 Procise 工程中勾选 UART1,使用的 MIO/EMIO 则根据电路板设计选择。

3362e591eff14a07a25a81f2645752c6.png


 第二步, 在demo导出样例中, 重新导出 FSBL 和 DeviceTree。

6414b857139047fda400b24819826882.png

第三步, 打开 FSBL 的工程,在 fmsh_ps_parameters.h 中可以确认 FSBL 选择的打印串口为 UART1。

#define FSBL WDT ENABLE
#define FSBL WDT TOP  15  
#define FSBL MULTI BOOT ENABLE 1#define DEVC OSPI DMA ENABLE
/* Integer multiple of recommendation 32k,default the 16M */ Idefine GOLDEN IMG ADDRESS 0x1000000
// UART
#define STDIN BASEADDRESS 0xe0023000  
#define STDOUT BASEADDRESS  0xE0023000  
#detine PeAR UARHeS U BAUDRATE
fdefine FPAR UARTPS 1 BAUDRATE  115200  
// Device id
#define UARTPS 1 DEVICE ID 1#define SDMMCPS 0 DEVICE ID O#define GTCPS 1 DEVICE ID 1
#define DEVCEGPS 1 DEVICE ID 1#define FPAR DMAPS 1 DEVICE ID 1#define DDRPS O DEVICE I

 注 1: UART0 的基地址为 0xE0004000, UART1 的基地址为 0xE0023000。

 注 2:如果 Procise 中同时勾选了 UART0 和 UART1, FSBL 默认的打印串口将是 0xE0004000。用户如果仍需使用 UART1 就要手动修改为 0xE0023000。

 确认无误后,编译 FSBL 得到 FSBL.out。

u-boot 阶段

 为了在 u-boot 中使用 UART1 来打印输出。

 第一步, 将 1.1 节导出的 DeviceTree 文件夹复制到 LinuxSDK 所在的 Linux 操作系统中。

 第二步, 如下图所示,修改” FMQL-Linux-SDK/device-tree/hw-platform/ fmsh-psoc.dtsi”文件。将其中的“stdout-path = “serial0:115200n8”;”改为“stdout-path = “serial1:115200n8”;”

status ="disabled";
};
chosen {
bootargs="console=ttyps0,115200earlyprintk no console suspend loglevel=8 root=/dev/nfs
rw
/* bootloader will place initrd at this address */
//  linux,initrd-start =<0x12000000>; 
linux.initrd-end =<0x12800000>:
//
stdout-path ="serial1:115200n8": /* for u-boot */
};
aliases{
ethernet0 =&qmac0; ethernet1 = &amacl:
serial0 =&uart0:  seriall = &uartl; Hx--1024

 第三步, 重新编译 DTB(设备树)和 u-boot。 最后验证,如下图所示, u-boot 可以正常打印且显示其使用的串口为“0xE0023000”,即 UART1。

CPU: FMSH PSOC FMQL45T900,Revision Code:0 Model: FMSH PSOC Board Board: FMSH Psoc Board DRAM:1023 MiB Flash: 0 Bytes NAND :0 MiB
MMC:  dwmmcde0043000:日  
Loading Environment from SPI Flash... Invalid bus 0(err=-19)
*** Warning-spiflash probe bus cs() failed, using default environment
Failed (-19)
In :  serialde0023000 
Out:  serialde0023000 
Err:  serialde0023000 
Net:  No ethernet found.  
Hit any key to stop autoboot: 0 
fmsh>
fmsh> Hx--1024

kernel 阶段

 为了在 kernel 中使用 UART1 来输出打印。

 第一步,先执行make fmsh_fmql_defconfig 修改 kernel 的配置, 参照下图,将“kernel hacking”中的 debug uart 更改为 UART1。

然后重新编译 kernel,打包进 image.ub 中。

Kernel low-level debugging functions(read help!)
Kernellow-level debugging port(Kernel low-level debugging on FMSH PSOC using UART1)
(0xe0023000) Physical base address of debug UART(0xf1023000) virtual base address of debug UART(2) Register offset shift for the 8250 debug uART
Use 32-bit accesses for 8250 UART8250 UART is Palmchip BK-310x
Enable flow control for 8250 UART Early printk
 Write the current pid to the CoNTEXTIDR register
] CoreSight Tracing Support .-- Hx--1024

 注:当选择 UART1 后,下面的物理和虚拟地址应分别更新为 0xe0023000 和 0xf1023000, 如果未自动更新,需要手动修改。 如有疑问,可以查看.config 文件确认此项修改是否生效,如下图所示。

CONFIG DEBUG LL=y
# CONFIG DEBUG FMOL UARTO is not set CONFIG DEBUG FMQL UART1=y
# CONFIG DEBUG ICEDCC is not set
# CONFIG DEBUG SEMIHOSTING is not set# CONFIG DEBUG LL UART 8250 is not set#1 CONFIG DEBUG LL UART PLO1X is not set CONFIG DEBUG LL INCLUDE="debug/8250.S" CONFIG DEBUG UART 8250=y
CONFIG DEBUG UART PHYS=0xe0023000 CONFIG DEBUG UART VIRT=0xf1023000 CONFIG DEBUG UART 8250 SHIFT=2
CONFIG DEBUG UART 8250 WORD=y Hx--1024

 第二步, 启动开发板,进入 u-boot 后停下, 依次输入(实际上没配置也直接过了,如果没自动配置好的时候在手动配):

setenv bootargs console=ttyPS0,115200 noinitrd earlyprintk root=/dev/mmcblk0p2 rootwait9
rw
mmc rescan && fatload mmc 0:1 0x2000000 /image.ub
bootm 0x2000000

 之后就可以看到正常的启动打印了(uboot的调试串口会默认uart0为控制台串口,如果实际是则无需更改,若实际为uart1,但是只修改 kernel 中的配置使 debug uart 为 UART1, 未在 u-boot 的 bootargs 中配置“console=ttyPS1”,将导致启动的后半段 log 通过 ttyPS0(UART0) 打印出来,因为它被作为默认的控制台串口。 而如果 Procise 没有勾选 UART0,则启动流程将 pending)

starting kernel 后的 early printk 打印也会相应正常


相关文章
|
存储 并行计算 Linux
国产之路:复旦微FMQL调试笔记1:PS网口
FPGA,全程现场可编程门阵列,是指一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。换个简单通俗的介绍方式,就好比一个全能的运动员,FPGA就是这么神奇的可以通过设定而实现各种复杂的功能电路。
1645 0
国产之路:复旦微FMQL调试笔记1:PS网口
|
2月前
|
人工智能 运维 自然语言处理
|
4月前
|
SQL Java API
《Java开发手册灵魂13问》正式上线,带你剖析阿里巴巴的开发细节
一线大厂怎么用Java?看阿里技术专家给你分析!《〈Java开发手册(泰山版)〉灵魂13问》电子书正式上线带你剖析阿里巴巴一线团队开发思维。
|
9月前
|
运维 应用服务中间件 网络安全
九五从零开始的运维之路(其十八)
本篇将简述的内容:Linux系统下的Nginx基本部署
35 0
|
9月前
|
运维 网络协议 Linux
九五从零开始的运维之路(其十五)
DHCP(Dynamic Host Configuration Protocol)是一种网络协议,用于动态地分配IP地址和其他网络配置参数给网络中的设备。能动态的进行IP地址分配,从而实现网络的自动配置。同一个网络环境下不允许存在多个DHCP服务器
76 0
|
存储 人工智能 运维
我心中的云时代原生开发环境
试想,如果未来的应用开发,开发者通过函数计算、弹性容器服务等能力去承载自己的业务逻辑,存储、数据库、消息等中间件能力通过 Backend as a Service 的方式去获取,即未来使用云计算的开发者能够无需关心云计算的基础底层概念,直接聚焦自己的业务开发,以近乎无感的方式获得云计算的帮助。基于这样的趋势的预判,本文作者开始在云原生的路径上探索,并致力于为云时代的原住民开发者提供一个理想的一站式的开发工作环境:云原生 Serverless 开发者工作平台。
696 0
我心中的云时代原生开发环境
|
开发者
重磅发布!《Elastic开发者手册》开放免费下载啦!从理论到实战一册包揽!
《Elastic开发者手册》的创作发布,源于阿里云开发者社区和Elastic中国的友好合作。手册共分为上下两册,上册为基础开发宝典,下册为产品应用实战。书中的内容均来源于Elastic中国官方微信公众号。《Elastic开发者手册》集合了16篇Elastic(中国)深受开发者喜爱的优质内容,内容涵盖Elastic的基础介绍、能力组成、功能实战和开发效能等。
重磅发布!《Elastic开发者手册》开放免费下载啦!从理论到实战一册包揽!
|
缓存 Rust 前端开发
2022,前端工具链十年盘点
2021 的年度盘点我们选择了一个特别的形式,把时间范围拉长到 10 年,梳理前端工具链里的 12 个重要的包的发布和版本更新时间,结合 npm 下载数据,看看前端的工具链在这十年间有怎样的演变。
651 0
2022,前端工具链十年盘点
|
Linux 开发者 芯片
今晚7点直播!聊一聊“进击的开源操作系统”
4 月 6 日(今晚) 7 点,龙蜥社区联合 InfoQ 相约来自学术和产业圈的好友,焚香饮茶,聊一聊“开源操作系统”。
今晚7点直播!聊一聊“进击的开源操作系统”
|
Arthas HandyJSON 监控
阿里巴巴常用的 12 个后端开发工具,建议你快快收藏。。
从手动编码到自动化,从重复工作到创新,开发人员工具随着技术的发展而不断发展。阿里巴巴集团和阿里巴巴云已通过开源发布和基于云的实施向公众提供其技术。通过在各种业务场景中的多年开发积累了这些技术。