1、booter程序介绍
(1)源码目录:pcie_mcc/multi_boot/example/boot_test.c;
(2)调用命令:./booter start_device;
(3)booter程序的作用:在主片将pcie启动相关的驱动加载完成后,调用booter来引导从片pcie启动;
2、主片引导从片启动的过程
(1)调用pcie启动相关驱动,知道当前pcie接口连接了多少个从片;
(2)先传输uboot的前80KB数据到36A的内部RAM中,并启动36A,让36A芯片执行传输过去的uboot前80KB数据,实现内存的初始化;
(3)初始化内存后,将uboot通过pcie的地址转换单元发送到36A从片的内存中;
(4)将kernel通过pcie的地址转换单元发送到36A从片的内存中;
(5)将rootfs通过pcie的地址转换单元发送到36A从片的内存中;
(6)经过第二到第五步,已经将uboot、kernel、rootfs发送到所有36A从片;
(7)启动所有36A从片,36A直接执行内存中的uboot,启动内核,再挂载根文件系统;
3、函数调用顺序
main(int argc, char *argv[])
ioctl(dev_fd, GET_ALL_DEVICES, &attr); #获取扫描到的所有36A从片
start_device(dev_fd, action, attr);
transfer_uboot_to_devices
ioctl(fd, PCIE_TRANSFER_DATA, &attr_arg); # 传输uboot到36A从片
transfer_kernel_to_devices(dev_fd, &attr);
ioctl(fd, PCIE_TRANSFER_DATA, &attr_arg); # 传输kernel到36A从片
transfer_fs_to_devices(dev_fd, &attr);
ioctl(fd, PCIE_TRANSFER_DATA, &attr_arg); # 传输rootfs到36A从片
unreset_slave_devices(dev_fd, &attr);
ioctl(fd, START_TARGET_DEVICE, &attr_arg); # 启动36A从片
reset_slave_device(dev_fd, action, attr); # 复位所有从片,如果是通过pcie启动36A,这个一般不调用
4、pcie启动时从片的地址空间布局
5、补充:什么是芯片内SRAM?
(1)芯片内SRAM:就是36A芯片内部集成了小容量的RAM内存,SRAM是静态RAM,不需要初始化就可以运行;
(2)对应芯片内存内还集成小容量的SROM,用来存放芯片固化的代码,同样不需要初始化上电即可用;
(3)芯片上电,将SROM中的代码搬运到SRAM中运行,这样才可以支持各种启动方式;
(4)在初始化内存前,内存是不可用的,所以只能将uboot前面部分读取到片内SRAM运行,初始化内存后接可以直接将uboot、kernel、rootfs发送到内存;
(5)参考博客:https://blog.csdn.net/weixin_42031299/article/details/123602617;
6、疑问:读取前80KB的uboot已经超过片内SRAM大小?
(1)从芯片手册的地址空间映射表可知,片内SRAM的大小是64KB,是放不下uboot前80KB的;
(2)但是片内SRAM地址后面紧接的地址空间是保留地址空间,应该是将超过的16KB复制到该地址空间也没事,或者是芯片内固化的代码已经做了截断处理;
(3)读uboot前80KB是海思SDK里提供的pcie_mcc驱动指定的,具体为什么要是80KB只有海思的原厂工程师最清楚,不必深究;
(4)我看到有其他人说,初始化内存的代码只在uboot的前32KB,其实不用读取80KB这么多,如果想了解更清楚,可以去看uboot的链接脚本,看看哪些文件被链接在前面;文章来源:https://www.toymoban.com/news/detail-462695.html
7、booter总结
(1)booter功能是主片引导从片通过pcie接口启动,逻辑上并不复杂,就是主片把uboot、kernel、rootfs发送到从片的内存,然后启动从片;
(2)想要彻底了解海思pcie启动,还要继续深挖vendor_dev_host.ko和boot_device.ko,这两个驱动是启动相关的;文章来源地址https://www.toymoban.com/news/detail-462695.html
到了这里,关于海思芯片pcie启动——pcie_mcc驱动框架的booter程序分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!