龙芯2k1000-pmon(8)- pmon编译的过程

这里主要讲的是make的一些简要的过程,没有分析makefile。

依据是编译的提示信息。

1. pmon文件的生成。

 pmon由ld链接生成,由以下这些文件链接而来的。

共216个文件
start.o
crtbegin.o
param.o
ioconf.o
ri.o
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
call.o
mycmd.o
xyzModem.o
crc16.o
sysinfo.o
newmt.o
setup.o
display.o
cmdtable.o
debuggercmds.o
devls.o
cmd_go.o
hist.o
ifaddr.o
oload.o
load.o
cmd_grub.o
memcmds.o
memtst.o
miscmds.o
pcicmds.o
pflash.o
cmd_env.o
transp.o
sym.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
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
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
dc.o
ls2k_pci.o
localbus.o
spi_w.o
nand_opt.o
set_cpu_ddr_freq.o
set_vol.o
rtc.o
eeprom.o
load_dtb.o
signal_test.o
slt.o
synopGMAC_Dev.o
synopGMAC_network_interface.o
synopGMAC_pci_bus_interface.o
synopGMAC_plat.o
if_gmac.o
mii.o
pciconf.o
pci_map.o
pci.o
e1000_i210.o
e1000_82575.o
e1000_mac.o
e1000_phy.o
e1000_manage.o
e1000_api.o
e1000_mbx.o
e1000_nvm.o
igb_main.o
pciide.o
ppb.o
pcidevs.o
ahci.o
ahcisata.o
ahci-sd.o
ahci-cdrom.o
wd.o
ata_wdc.o
ata.o
/home/jc/ls2a1000/pmon-loongson3-hj20004/Targets/LS2K-hj20004/compile/ls2k/lib/libc/libc.a
/home/jc/ls2a1000/pmon-loongson3-hj20004/Targets/LS2K-hj20004/compile/ls2k/lib/libm/libm.a
/home/jc/ls2a1000/pmon-loongson3-hj20004/Targets/LS2K-hj20004/compile/ls2k/lib/libz/libz.a
crtend.o
vers.o

2. pmon.bin.c 的由来

 首先是gzip pmon.bin 生成pmon.bin.gz (pmon.bin 暂时没有看到由来,应该是由pmon生成的,暂时放一下,晚点再找找。)

由bin2c 生成pmon.bin.c 第三个参数应该是数组名。

  3.gzrom.bin 文件的由来。

3.1 initmips.c 是临时生成的,是根据实际的pmon文件生成的,因为pmon这个执行文件中还有一个initmips函数,这个脚本会定位到那个函数。

3.2 这里又生成了一次链接脚本。注意链接的地址不一样。

3.3 编译生成gzrom,由start.o和zloader.o(内部包含了pmon.bin.c和initmips.c,memop.c,malloc.c,inflate.c等)

zloader.c 在文件中包含了initmips.c,这个就是自动生成的那个文件。

同时还包含了pmon.bin.c文件。

 

 3.4 这里看到gzrom.bin的生成方式。不难猜测pmon.bin也是objcopy直接通过pmon生成的。

4. 我们实际用的是gzrom-dtb.bin.

4.1 生成对应的dtb文件。

 由dts生成dtb.i,再由dtb.i 生成dtb

4.2 生成最终的gzrom-dtb.bin

 由python脚本对里面的内容进行了一些小的调整,主要是加入环境变量。可以参考我之前写的环境变量的那个部分。那里我已经分析了。

 

这里简单的讲了以下make的过程。详细分析,还得结合makefile.inc文件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大智兄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值