这里主要讲的是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文件。