单龙芯3A3000-7A1000PMON研究学习-(12)撸起袖子干-分析代码前的准备工作1

1.make的过程我说了个大概,大家可以参考一下前面的文章。现在准备分析代码吧,其实这个准备工作内容应该蛮多的。可能后面还要补充。

2.首先找到关键的bin文件啊,就是可以最终下载到flash,能启动的镜像。(没更新过,但是还是得知道是更新谁吧)

官网上找,看了所有得更新方法,都是把gzrom.bin下载到flash中。那不用怀疑,就是它了。

3.其实我们得Makefile中已经有,而且是可以正确编译出这个bin文件的。

 

 这就是我们最终需要的文件。由rom这个目标生成的。

4.我有一个问题,它(gzrom.bin)是哪些源文件编译得出的?找到答案这样就对源代码有一个大概的认知。

4.1 从上图看,它由gzrom生成的。

4.2 从上图75行,gzrom由start.o和zloader.o 通过链接脚本合成的。 -e 指定入口函数

4.3 start.o 简单,由start.S生成。

4.4 zloader.o 由zloader.c 生成,下图示:

 

5.纳尼?转了半天,就这两个文件就生成了gzrom?????

zloader.c 文件也简单。。。难道就这么简单吗?

6.燃鹅,zloader.c还有隐藏操作。贴图来了。

 

上面两个图片是zloader.c包含的4个.c文件。看到这里就知道4.4步的图片上为什么编译这个文件还有几个c文件时依赖的原因了吧。。。。

还记不记得pmon.bin.c是自动生成的吧? 

7. 追踪pmon.bin.c,这是zloader.o一个依赖,必须要生成的。

这里解释了pmon.bin.c是如何生成的。 

 7.1 pmon.bin.c依赖于pmon.bin,上一篇已经分析了

好的,我看到的是${LD}...这一行

这一行指定了pmon是如何链接生成的。由${LIBDIR}和 ${SYSTEM_OBJ}(这是个命令?)vers.o链接生成 

找这两个变量 ,LIBDIR似乎没有找到定义,SYSTEM_OBJ倒是有:

 

 这里看得出,PMON由哪些文件构成了。变量我就不一一展开了。

OBJS在新生成的Makefile中全部列出来了。实际还有包含了目录,详细请看Targets\Bonito3a3000_7a\compile\Bonito\Makefie

OBJS=        wdc.o mainbus.o pcibr.o if.o if_ethersubr.o if_loop.o if_media.o \

radix.o raw_cb.o raw_usrreq.o route.o rtsock.o if_ether.o in.o \

in_cksum.o in_pcb.o in_proto.o ip_icmp.o ip_id.o ip_input.o \

ip_output.o raw_ip.o udp_usrreq.o tcp_debug.o tcp_input.o \

tcp_output.o tcp_subr.o tcp_timer.o tcp_usrreq.o kern_clock.o \

kern_misc.o kern_synch.o uipc_domain.o uipc_socket2.o \

kern_descrip.o kern_proc.o kern_syscall.o sys_generic.o \

subr_autoconf.o uipc_mbuf.o uipc_syscalls.o init_main.o \

kern_malloc.o kern_sig.o kern_time.o sys_socket.o uipc_socket.o \

bus_dma.o smbios.o uuid.o boot.o mycmd.o xyzModem.o crc16.o \

sysinfo.o newmt.o setup.o display.o test.o cmdtable.o \

debuggercmds.o devls.o cmd_go.o hist.o ifaddr.o oload.o load.o \

tftpd.o cmd_grub.o memcmds.o memtst.o miscmds.o pcicmds.o \

pflash.o cmd_env.o transp.o sym.o time.o shellcmds.o cmd_main.o \

window.o bootparam.o about.o autoconf.o callvec.o cmdparser.o \

debugger.o exception.o main.o more.o rsa.o sbrk.o env.o reset.o \

ramfile.o termio.o socket.o gzip.o iso9660fs.o devfs.o diskfs.o \

fatfs.o ext2fs.o dev_part.o loadfn.o exec.o exec_bin.o exec_elf.o \

exec_elf64.o exec_srec.o netio.o bootp.o ifconfig.o ping.o \

tftplib.o httplib.o debug.o decode.o fpu.o ops.o ops2.o \

prim_ops.o sys.o generic.o helper_exec.o helper_mem.o xf86int10.o \

xf86x86emu.o rs690_struct.o vesafb.o cfb_console.o kbd.o vgacon.o \

generic_poll.o flash.o flashdev.o flash_amd.o flash_int.o \

flash_sst.o flash_spi.o ns16550.o machdep.o mips_machdep.o \

disassemble.o mips.o cache.o usb.o usb_storage.o part.o \

usb-ohci.o usb_kbd.o cmd_usb.o xhci.o xhci-mem.o xhci-ring.o \

xhci-dwc3.o exec_txt.o menulist2f.o boot_cfg.o bootkernel.o fdt.o \

fdt_ro.o fdt_rw.o fdt_strerror.o fdt_wip.o password.o md5.o \

install.o save_ddrparam.o showwindows.o w83527_fan.o \

pci_machdep.o tgt_machdep.o ls7a_pci.o localbus.o eeprom.o \

spi_w.o dc.o i2c-gpio.o ltc.o usb_spi.o ls7a_gmac_mac_init.o \

load_dtb.o ls7a_dbg.o signal_test.o hda_test.o slt.o \

synopGMAC_Dev.o synopGMAC_network_interface.o \

synopGMAC_pci_bus_interface.o synopGMAC_plat.o dma_coherent.o \

mii.o pciconf.o pci_map.o pci.o if_em.o pciide.o ppb.o pcidevs.o \

ahci.o ahcisata.o ahci-sd.o ahci-cdrom.o wd.o ata_wdc.o ata.o \

cd.o

7.2 127行,把pmon.bin使用gzip压缩,形成pmon.bin.gz

7.3 128行,使用命令bin2c,将这个压缩文件生成一个c的数组。

8.总结一下吧:

8.1 首先应该是两个重要的文件start.S和zloader.c

8.2 其次是生成PMON对应的那一堆文件,这是个重点。

      按照PMON的说明,这个PMON.bin.c最后会被解压到内存中继续运行。其实这里就分成了两个部分,一个是解压之前,文件相对较少,一个是解压之后,文件就比较多了。 

8.3 解压之前肯定要做一些硬件初始化,比如时钟,串口,看门狗,cache,尤其是DDR内存,然后还有代码的拷贝,解压等。

8.4 解压之后,这里功能应该就会复杂些了,主要的主线还是要应到操作系统,那就看在系统引导之前需要做哪些初始化配置,还有哪些准备工作要做好,为启动系统做准备?第二条主线就是命令模式了,这个时候不自动引导系统,而是使用pmon的一些常用命令操作,比如配置环境变量,设置启动参数等等。这是分析代码的一个思路,毕竟代码糅合在一起,我们分析的时候应该去区分一下这一部分功能属于哪,这样结构更清晰。

9.留个问题,我们从start.o入手,似乎关联的就是start.S和zloader.c这两个文件,好像有点简单哈,是不是这样呢?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大智兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值