暂且转载,后面有时间在验证是否如此!
makefile分析:
/pmon/loader.2fdev/Makefile:
用./getname获得开发板型号的Makefile: Makefile.2fdev
/pmon/loader.2fdev/Makefile.2fdev:
说明开发板信息及Makefile
TARGET=Bonito2fdev
TARGETEL=Bonito
START=start.o
MEMSIZE=128
include Makefile.inc
/pmon/loader.2fdev/Makefile.inc:
export MKDEP=makedepend
ifndef PMONCC
CC=mips-elf-gcc -mips3
else
CC=${PMONCC}
endif
定义环境变量和gcc
GZROMSTARTADDR?=0xffffffff81000000
ROMSTARTADDR?=0xffffffff80010000
RAMSTARTADDR?=0xffffffff88000000
GZROMSTARTADDR_EJTAG?=0xffffffff81000200
定义代码开始的地址
ifeq ("${tgt}","rom")
gencode=./genrom
endif
如果tgt=rom ,则执行genrom这个文件进行cashe初始化
all: ${tgt}
sim: clean pmon.bin.c
gcc -o zloader -DSIM zloader.c
rom: clean ${START} zloader.o
gcc -DSTARTADDR=${GZROMSTARTADDR} -E -P ld.script.S > ld.script
mips-elf-ld -T ld.script -e start -o gzrom ${START} zloader.o
mips-elf-objcopy -O binary gzrom gzrom.bin
# sync
ram: clean startram.o zloader.o
gcc -DSTARTADDR=${GZROMSTARTADDR} -E -P ld.script.S > ld.script
mips-elf-ld -T ld.script -e start -o gzram startram.o zloader.o
cp gzram /tftpboot
如果tgt=rom则编译后生成二进制的gzrom gzrom.bin文件,依赖于start.o和zloader.o文件;
如果tgt=ram则编译后生成gzram文件,并保存到/tftpboot文件夹下,方便用网络下载调试,依赖于startram.o zloader.o。文件
${START}:
rm -f ../Targets/${TARGET}/compile/${TARGETEL}/${START}
gcc -DSTARTADDR=${ROMSTARTADDR} -E -P ld.script.S > ../Targets/${TARGET}/conf/ld.script
make -C ../Targets/${TARGET}/compile/${TARGETEL}/
cp ../Targets/${TARGET}/compile/${TARGETEL}/${START} .
首先删除原有的Start.o文件,然后编译ld.script.S配置文件,然后编译
/Targets/Bonito2fdev/compile/Bonito的Makefile文件。
zloader.o: zloader.c inflate.c malloc.c memop.c pmon.bin.c initmips.c
$(CC) -EL -mcpu=r4000 -c zloader.c ${ZLOADER_OPTIONS} -DMEMSIZE=${MEMSIZE}
zloader.o依赖于zloader.c inflate.c malloc.c memop.c pmon.bin.c initmips.c等文件
/Targets/Bonito2fdev/compile/Bonito的Makefile文件编译的文件有:
$S为/pmon/Targets/
$S/sys/kern/param.c
$S/pmon/arch/mips/ri.c
$S/pmon/arch/mips/crtbegin.c
$S/pmon/arch/mips/crtend.c
$S/conf/newvers.sh
$S/sys/dev/ic/wdc.c $S/pmon/dev/mainbus.c $S/pmon/dev/pcibr.c /
$S/sys/net/if.c $S/sys/net/if_ethersubr.c $S/sys/net/if_loop.c /
$S/sys/net/if_media.c $S/sys/net/radix.c $S/sys/net/raw_cb.c /
$S/sys/net/raw_usrreq.c $S/sys/net/route.c $S/sys/net/rtsock.c /
$S/sys/netinet/if_ether.c $S/sys/netinet/in.c /
$S/sys/netinet/in_cksum.c $S/sys/netinet/in_pcb.c /
$S/sys/netinet/in_proto.c $S/sys/netinet/ip_icmp.c /
$S/sys/netinet/ip_id.c $S/sys/netinet/ip_input.c /
$S/sys/netinet/ip_output.c $S/sys/netinet/raw_ip.c /
$S/sys/netinet/udp_usrreq.c $S/sys/netinet/tcp_debug.c /
$S/sys/netinet/tcp_input.c $S/sys/netinet/tcp_output.c /
$S/sys/netinet/tcp_subr.c $S/sys/netinet/tcp_timer.c /
$S/sys/netinet/tcp_usrreq.c $S/sys/kern/kern_clock.c /
$S/sys/kern/kern_misc.c $S/sys/kern/kern_synch.c /
$S/sys/kern/uipc_domain.c $S/sys/kern/uipc_socket2.c /
$S/sys/kern/kern_descrip.c $S/sys/kern/kern_proc.c /
$S/sys/kern/kern_syscall.c $S/sys/kern/sys_generic.c /
$S/sys/kern/subr_autoconf.c $S/sys/kern/uipc_mbuf.c /
$S/sys/kern/uipc_syscalls.c $S/sys/kern/init_main.c /
$S/sys/kern/kern_malloc.c $S/sys/kern/kern_sig.c /
$S/sys/kern/kern_time.c $S/sys/kern/sys_socket.c /
$S/sys/kern/uipc_socket.c $S/sys/dev/bus_dma.c /
$S/pmon/cmds/boot.c $S/pmon/cmds/mycmd.c $S/pmon/cmds/xyzModem.c
$S/pmon/cmds/crc16.c $S/pmon/cmds/sysinfo.c /
$S/pmon/cmds/newmt/newmt.c $S/pmon/cmds/setup.c /
$S/pmon/cmds/cmdtable.c $S/pmon/cmds/debuggercmds.c /
$S/pmon/cmds/devls.c $S/pmon/cmds/cmd_go.c $S/pmon/cmds/hist.c
$S/pmon/cmds/ifaddr.c $S/pmon/cmds/oload.c $S/pmon/cmds/load.c /
$S/pmon/cmds/tftpd.c $S/pmon/cmds/cmd_grub.c /
$S/pmon/cmds/memcmds.c $S/pmon/cmds/memtst.c /
$S/pmon/cmds/miscmds.c $S/pmon/cmds/pcicmds.c /
$S/pmon/cmds/pflash.c $S/pmon/cmds/cmd_env.c /
$S/pmon/cmds/transp.c $S/pmon/cmds/sym.c $S/pmon/cmds/time.c /
$S/pmon/cmds/shellcmds.c $S/pmon/common/about.c /
$S/pmon/common/autoconf.c $S/pmon/common/callvec.c /
$S/pmon/common/cmdparser.c $S/pmon/common/debugger.c /
$S/pmon/common/exception.c $S/pmon/common/main.c /
$S/pmon/common/more.c $S/pmon/common/rsa.c $S/pmon/common/sbrk.c
$S/pmon/common/env.c $S/pmon/fs/ramfile.c $S/pmon/fs/termio.c /
$S/pmon/fs/socket.c $S/pmon/fs/gzip.c $S/pmon/fs/iso9660fs.c /
$S/pmon/fs/devfs.c $S/pmon/fs/diskfs.c $S/pmon/fs/ext2fs.c /
$S/pmon/fs/fatfs.c $S/pmon/loaders/loadfn.c /
$S/pmon/loaders/exec.c $S/pmon/loaders/exec_bin.c /
$S/pmon/loaders/exec_elf.c $S/pmon/loaders/exec_elf64.c /
$S/pmon/loaders/exec_wince.c $S/pmon/loaders/exec_srec.c /
$S/pmon/netio/netio.c $S/pmon/netio/bootp.c /
$S/pmon/netio/ifconfig.c $S/pmon/netio/ping.c /
$S/pmon/netio/tftplib.c $S/pmon/netio/httplib.c /
$S/x86emu/int10/radeon_init.c $S/x86emu/src/x86emu/debug.c /
$S/x86emu/src/x86emu/decode.c $S/x86emu/src/x86emu/fpu.c /
$S/x86emu/src/x86emu/ops.c $S/x86emu/src/x86emu/ops2.c /
$S/x86emu/src/x86emu/prim_ops.c $S/x86emu/src/x86emu/sys.c /
$S/x86emu/src/biosemu/besys.c $S/x86emu/src/biosemu/bios.c /
$S/x86emu/src/biosemu/linuxpci.c $S/x86emu/src/biosemu/biosemu.c /
$S/x86emu/src/biosemu/freebiosvga.c $S/pmon/dev/kbd.c /
$S/pmon/dev/vgacon.c $S/pmon/dev/generic_poll.c /
$S/pmon/dev/flash.c $S/pmon/dev/flashdev.c /
$S/pmon/dev/flash_amd.c $S/pmon/dev/flash_int.c /
$S/pmon/dev/flash_sst.c $S/pmon/dev/ns16550.c /
$S/pmon/arch/mips/machdep.c $S/pmon/arch/mips/mips_machdep.c /
$S/pmon/arch/mips/disassemble.c $S/pmon/dev/loopdev.c /
$S/Targets/Bonito2fdev/pci/pci_machdep.c /
$S/Targets/Bonito2fdev/Bonito/tgt_machdep.c /
$S/Targets/Bonito2fdev/dev/localbus.c $S/sys/dev/mii/mii.c /
$S/sys/dev/pci/pciconf.c $S/sys/dev/pci/pci_map.c /
$S/sys/dev/pci/pci.c $S/sys/dev/pci/if_fxp.c /
$S/sys/dev/pci/rtl8139.c $S/sys/dev/pci/em/if_em.c /
$S/sys/dev/pci/pciide.c $S/sys/dev/pci/pcidevs.c /
$S/sys/dev/pci/vt82c686.c $S/sys/dev/ata/wd.c /
$S/sys/dev/ata/ata_wdc.c $S/sys/dev/ata/ata.c $S/sys/dev/ata/cd.c