协处理器
协处理器一词通常用来表示处理器的一个可选部件,负责处理指令集的某个扩展。
- CP1 是浮点协处理器,
- CP0 系统控制协处理器
- CP2 偶尔用来指定ISA扩展或者在几个SoC应用中提供专用的寄存器;
- CP3 被MIPS32/64浮点指令占用,很少用;
协处理器CP0
除了通常的运算功能,任何处理器都需要一些部件处理中断,配置选项和监控片上高速缓存(cache)和定时器功能。
CP0协处理器主要提供:
1)cpu的配置;
2)高速缓存控制;
3)异常/中断控制;
4)存储管理单元控制;
5)杂项,如定时器,事件计数器,奇偶校验,错误检测;
在汇编中:
li t0, 0x10000004
mtc0 t0, $12 #状态寄存器,CPU的特权等级,能使用的中断引脚等。
mtc0 zero, $13
\boot\uboot\board\atheros\common中的956x.S中
lowlevel_init: 在956x.S中定义,设置CPU,AHB,DDR,
uboot 作为bootloader的一种,用于引导操作系统顺利启动,本文记录基于mips架构SDK中uboot的编译过程和启动流程
编译过程
编译过程可以分为三部分:
1.源码编译
uboot编译的方式是将各个目录下的源码编译成.o,然后通过mips-linux-uclibc-ar 命令创建成静态库,
./lib_bootstrap/libbootstrap.a
./cpu/mips/libmips.a
./board/atheros/board955x/libboard955x.a
./lib_mips/libmips.a
./lib_generic/libgeneric.a
./common/libcommon.a
./drivers/libdrivers.a
./rtc/librtc.a
./net/libnet.a
./post/libpost.a
./post/cpu/libcpu.a
到最后通过连接脚本将这些静态库链接成u-boot,如下:
mips-linux-uclibc-ld -Bstatic -T /***/boot/u-boot/board/atheros/board955x/u-boot.lds -Ttext 0x80010000 $UNDEF_SYM cpu/mips/start.o /***/boot/u-boot/board/atheros/board955x/extra.o \
--start-group lib_generic/libgeneric.a common/libcommon.a board/atheros/board955x/libboard955x.a cpu/mips/libmips.a lib_mips/libmips.a drivers/libdrivers.a net/libnet.a rtc/librtc.a --end-group -L /***/toolchain/gcc-4.3.3/build_mips/staging_dir/usr/bin/../lib/gcc/mips-linux-uclibc/4.3.3 -lgcc \
-Map u-boot.map -o u-boot
注意 -Ttext 0x80010000,这里是将初始地址重定向为0x80010000,如果不设置这个重定向地址,则为0;为什么是这个地址,后面再说!
2. 添加libbootstrap.a
首先将u-boot拷贝成u-boot.bin
mips-linux-uclibc-objcopy –gap-fill=0xff -O binary u-boot u-boot.bin 各个section之间填充0xff
然后编译目录lib_bootstrap,并生成libbootstrap.a,如下:
/home/project/plc_platform/board/model_qca_qca95xx/sdk/board956x/boot/u-boot/board/atheros/board955x/u-boot-bootstrap.lds