Embora o P1C0 tenha começado como uma ferramenta de playground e pesquisa para M1 Macs, ele está atualmente em direção a um kernel simples e talvez completo no futuro, visando o 2021 MacBook Pro 14 ".
O sistema operacional é escrito principalmente em ferrugem, com alguns bits de montagem aqui e ali para interagir com o hardware. No momento, ele tem suporte para rosqueamento básico no EL1 e alguns drivers para interagir com o hardware (como um driver HID para o teclado através do protocolo de transporte SPI).
Obtenha as fontes do GitHub com:
git clone https://github.com/javier-varez/p1c0Supondo que você tenha carga instalada em seu sistema, você precisará de mais algumas dependências para construir e testar o projeto:
# Install cargo-binutils, used to generate a binary/Mach-o file out of the compiled ELF.
cargo install cargo-binutils
# Assuming you are building this in Ubuntu-20.04. Otherwise check your package manager
# On an m1 mac with macOS p1c0 will just use the built-in clang version
sudo apt update
sudo apt install -y gcc-aarch64-linux-gnuPara executar o simulador, você precisará de uma versão do Qemu com suporte para o Apple M1 Pro. Você pode encontrar esta versão aqui e o último lançamento aqui.
INSTALL_DIR= ${YOUR_DESIRED_INSTALL_PATH}
OS= $( uname | tr ' [:upper:] ' ' [:lower:] ' )
ARCH= $( uname -m )
curl -OL https://github.com/Javier-varez/qemu-apple-m1/releases/download/Apple_M1_Pro_0.1.3/0.1.3_M1_Pro_ ${OS} _ ${ARCH} .zip
unzip -d ${INSTALL_DIR} /qemu-apple-m1 0.1.3_M1_Pro_ ${OS} _ ${ARCH} .zip
# And finally make it available in your path. You can add this to your .bashrc or .bash_profile
export PATH= ${INSTALL_DIR} /qemu-apple-m1/bin: $PATHcargo rrcargo br Isso criará um arquivo .macho no fw/p1c0.macho . Para instalar esse objeto no seu computador, você pode seguir as instruções aqui.
$ cargo tSinta -se à vontade para contribuir com este projeto e abrir problemas. As contribuições apreciadas incluem, mas não estão limitadas a:
Em relação às contribuições do código, certifique-se de formatar todo o código com rust-fmt .
Parte desse código é baseado na fantástica pesquisa feita por Marcan e nas pessoas boas por trás do projeto Asahi Linux.
Além disso, algum código inicial (como o arquivo Exceptions.RS) foi baseado no Rust-Raspberrypi-OS-Tutorial da organização embebida em ferrugem.