树莓派实验报告
lab1
MACOS 访问串口教程https://software.intel.com/en-us/setting-up-serial-terminal-on-system-with-mac-os-x
命令行
qemu-system-aarch64 -M raspi3 -k en-us -serial null -serial stdio -drive file=sdcard.img,format=raw -kernel kernel8.img
arm中的cpsr相当于MIPS CP0里的status
arm中 通过w0-30表示32位引用寄存器的方法, x0-30表示64位引用寄存器的方法
Broadcom Arm Cortex A53-architecture processor 是一个arm 处理器 为v8代ARM
配置树莓派开发板
将uart to usb转换口连接到GPIO上, 将kernel8.img和相关配置文件拷贝到microsd卡上, 连接usb,
上电, 启动, 使用screen -L /dev/cu.usbserial-00006014 115200
指令观察串口输出。
启动
配置include.mk, 修改gcc和ld的路径到自己电脑安装交叉编译器的路径
在start.S中, 首先获得当前CPU的编号
获得CPU编号的方法很简单, 通过MPIDR_EL1寄存级获得, 通过查阅手册, 可以发现
MPIDR_EL1这个寄存器可以提供关于当前运行的CPU的核的信息, 想要知道当前是第几个核心, 只需要访问最后四位就好了。
mrs x0, mpidr_el1
[外链图片转存失败(img-Zi99XmLM-1562856918022)(/Users/edward/Library/Application Support/typora-user-images/image-20190528153456748.png)]
[外链图片转存失败(img-nPKYt2K5-1562856918023)(/Users/edward/Library/Application Support/typora-user-images/image-20190528153524359.png)]
使用mrs指令以64位的方式放入0号寄存器中。
如果这是0号CPU的话, 也就是最低三位都是0, 那么跳转到main函数。
否则一直循环。
uart
参考了教程中的函数, 实现了uart和读取功能。
我把和GPIO相关的宏放到了gpio.h中, UART的宏定义放在uart.h中, uart的函数放在uart.c中
设置14, 1