Skip to content

Commit 22c604f

Browse files
zanezhubzanezandre-richter
authored
README.ES.md -> 00_before_we_start (#149)
* README.ES.md I added a spanish translation for the README.md file, and modified the README.md to add my github profile and to add the link to README.ES.md file * Slightly reorganize translation overview * README.ES.md These changes are in response to PR comments * Update README.ES.md * README.ES.md -> 00_before_we_start * Updating README.ES.md I corrected a few mistakes in both README.ES.md files. * README.ES.md for 00 These changes are in response to PR comments Co-authored-by: zanez <[email protected]> Co-authored-by: Andre Richter <[email protected]>
1 parent 22aaa9e commit 22c604f

File tree

2 files changed

+134
-29
lines changed

2 files changed

+134
-29
lines changed

00_before_we_start/README.ES.md

+103
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# Antes de comenzar
2+
3+
El texto a continuación es una copia 1:1 de la documentación que
4+
puede ser encontrada al principio del archivo del código fuente
5+
del núcleo (kernel) en cada tutorial. Esta describe la estructura
6+
general del código fuente, e intenta transmitir la filosofía detrás
7+
de cada enfoque. Por favor leélo para familiarizarte
8+
con lo que te vas a encontrar durante los tutoriales. Te ayudará a navegar el código de una mejor manera y a entender las diferencias y agregados entre los diferentes tutoriales.
9+
10+
Por favor, nota también que el siguiente texto va a referenciar
11+
los archivos del código fuente (p. e.j. `**/memory.rs`) o funciones que
12+
no van a existir aún en los primeros tutoriales. Estos archivos serán agregados
13+
a medida que el tutorial avance.
14+
15+
¡Diviértanse!
16+
17+
# La estructura del código y la arquitectura
18+
19+
El código está dividido en diferentes módulos donde cada uno representa un
20+
subsistema típico del `kernel (núcleo)`. Los módulos de más alto nivel de los subsistemas se encuentran directamente en la carpeta `src`.
21+
Por ejemplo, `src/memory.rs` contiene el código que está relacionado
22+
con el manejo de memoria.
23+
24+
## Visibilidad del código de arquitectura del procesador
25+
26+
Algunos de los subsistemas del `núcleo (kernel)` dependen del código de bajo nivel (low-level) dedicado a la arquitectura del procesador.
27+
Por cada arquitectura de procesador que está soportada, existe una subcarpeta en `src/_arch`, por ejemplo, `src/_arch/aarch64`.
28+
29+
La carpeta de arquitecturas refleja los módulos del subsistema establecidos en `src`. Por ejemplo, el código de arquitectura que pertenece al subsistema MMU del `núcleo(kernel)` (`src/memory/mmu.rs`) irá dentro de (`src/_arch/aarch64/memory/mmu.rs`).
30+
Este archivo puede ser cargado como un módulo en `src/memory/mmu.rs` usando el `path attribute` (atributo de ruta). Usualmente, el nombre del módulo elegido es el nombre del módulo genérico con el prefijo de `arch_`
31+
32+
Por ejemplo, esta es la parte superior de `src/memory/mmu.rs`:
33+
34+
```
35+
#[cfg(target_arch = "aarch64")]
36+
#[path = "../_arch/aarch64/memory/mmu.rs"]
37+
mod arch_mmu;
38+
```
39+
40+
En muchas ocasiones, los elementos de `arch_module` serán reexportados públicamente por el módulo principal.
41+
De esta manera, cada módulo específico de la arquitectura puede proporcionar su implementación de un elemento, mientras que el *invocante* no debe de preocuparse por la arquitectura que se ha compilado condicionalmente.
42+
43+
## Código BSP
44+
45+
`BSP` significa Board Support Package (Paquete de Soporte de la Placa).
46+
El código `BSP` está dentro de `src/bsp.rs` y contiene las definiciones y funciones de la placa base específica elegida.
47+
Entre estas cosas se encuentran diferentes elementos como el mapa de memoria de la placa o instancias de controladores para dispositivos que se presentan en la placa elegida.
48+
49+
Justo como el código de la arquitectura del procesador, la estructura del módulo del código `BSP` trata de reflejar los módulos del subsistema del `núcleo (kernel)`, pero no ocurre una reexportación esta vez. Eso significa que lo que sea que se esté proporcionando debe ser llamado empezando por el *namespace* (espacio de nombres) de `bsp`, p. ej. `bsp::driver::driver_manager()`.
50+
51+
## La interfaz del núcleo (kernel)
52+
53+
El `arch` y el `bsp` contienen código que se compilará condicionalmente dependiendo del procesador y placa actual para la que se compila el núcleo (kernel).
54+
Por ejemplo, el hardware de control de interrupciones de la `Raspberry Pi 3` y la `Raspberry Pi 4` es diferente, pero nosotros queremos que el resto del código del kernel funcione correctamente con cualquiera de los dos sin mucha complicación.
55+
56+
Para poder dar una limpia abstracción entre `arch`, `bsp` y código genérico del núcleo, los rasgos de `interface` se proporcionan *siempre y cuando tenga sentido*. Son definidos en su módulo de subsistema correspondiente y ayuda a reforzar el patrón de programar con respecto a una interfaz, sin importar la implementación concreta.
57+
58+
Por ejemplo, habrá una *IRQ handling interface* (interfaz de manejo de interrupciones) común, el cual los dos diferentes controladores de ambas `Raspberry` implementarán, y solo exportarán la interfaz común al resto del `núcleo (kernel)`.
59+
60+
```
61+
+-------------------+
62+
| Interface (Trait) |
63+
| |
64+
+--+-------------+--+
65+
^ ^
66+
| |
67+
| |
68+
+----------+--+ +--+----------+
69+
| kernel code | | bsp code |
70+
| | | arch code |
71+
+-------------+ +-------------+
72+
```
73+
74+
# Resumen
75+
76+
Para un subsistema lógico del `núcleo (kernel)`, el código correspondiente puede ser distribuido sobre diferentes localizaciones físicas. Aquí un ejemplo para el subsistema de memoria:
77+
78+
- `src/memory.rs` y `src/memory/**/*`
79+
80+
- Código común que es independiente de la arquitectura del procesador de destino y las características de la placa (`BSP`).
81+
- Ejemplo: Una función para poner a cero un trozo de memoria.
82+
- Las interfaces para el subsistema de la memoria que son implementados por código de `arch` o `BSP`.
83+
- Ejemplo: Una interfaz `MMU` que define prototipos de función de `MMU`.
84+
85+
- `src/bsp/__board_name__/memory.rs` y `src/bsp/__board_name__/memory/**/*`
86+
87+
- Código específico de `BSP`.
88+
- Ejemplo: El mapa de memoria de la placa (direcciones físicas de DRAM y dispositivos MMIO).
89+
90+
- `src/_arch/__arch_name__/memory.rs` y `src/_arch/__arch_name__/memory/**/*`
91+
92+
- El código específico de la arquitectura del procesador.
93+
- Ejemplo: Implementación de la interfaz `MMU` para la arquitectura `__arch_name__`.
94+
95+
Desde una perspectiva de *namespace*, el código del subsistema de **memoria** vive en:
96+
97+
- `crate::memory::*`
98+
- `crate::bsp::memory::*`
99+
100+
# Flujo de Boot / Boot flow
101+
102+
1. El punto de entrada del núcleo (kernel) es la función `cpu::boot::arch_boot::_start()`.
103+
- Está implementado en `src/_arch/__arch_name__/cpu/boot.s`.

README.ES.md

+31-29
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ P.S.: Para otros lenguajes, por favor busquen los diferentes archivos README. Po
3232
- Cada tutorial contiene un solo binario arrancable correspondiente al núcleo.
3333
- Cada tutorial nuevo extiende el tutorial anterior.
3434
- Cada tutorial tendrá un `README` y cada `README` tendrá un pequeña sección de [`tl;dr`](https://es.wikipedia.org/wiki/TL;DR) en donde se dará una pequeña perspectiva general de los cambios y se mostrará el código fuente `diff` del tutorial anterior para que se puedan inspeccionar los cambios/adiciones que han ocurrido.
35-
- Algunos tutoriales además de tener un `tl;dr` también tendrán una sección en la que se dará una explicación con todo lujo de detalle.
36-
El plan a largo plazo es que cada tutorial tenga una buena explicación además del `tl;dr` y el `diff`; pero por el momento los únicos tutoriales
37-
que gozan de una son los tutoriales en los que creo que el `tl;dr` y el `diff` no son suficientes para comprender lo que está pasando.
35+
- Algunos tutoriales además de tener un `tl;dr` también tendrán una sección en la que se dará una explicación con todo lujo de detalle.
36+
El plan a largo plazo es que cada tutorial tenga una buena explicación además del `tl;dr` y el `diff`; pero por el momento los únicos tutoriales
37+
que gozan de una son los tutoriales en los que creo que el `tl;dr` y el `diff` no son suficientes para comprender lo que está pasando.
3838
- El código que se escribió en este tutorial soporta y corre en la **Raspberry Pi 3** y en la **Raspberry 4**
3939
- Del tutorial 1 hasta el 5 son tutoriales "preparatorios", por lo que este código solo tendrá sentido ejecutarlo en [`QEMU`](https://www.qemu.org/).
4040
- Cuando llegues al [tutorial 5](05_drivers_gpio_uart) podrás comenzar a cargar y a ejecutar el núcleo en una
@@ -61,28 +61,33 @@ Muchas de las cosas vistas aquí también funcionan en **macOS**, pero esto solo
6161
### 🚀 La versión tl;dr
6262

6363
1. [Instala Docker Desktop][install_docker].
64+
6465
2. (**Solo para Linux**) Asegúrate de que la cuenta de tu usuario está en el [grupo `docker`][docker group].
66+
6567
3. Prepara la `Rust` toolchain. La mayor parte se hará automáticamente durante el primer uso del archivo [rust-toolchain](rust-toolchain).
6668
Todo lo que nos queda hacer a nosotros es:
67-
69+
6870
i. Si ya tienes una versión de Rust instalada:
69-
```bash
70-
cargo install cargo-binutils rustfilt
71-
```
72-
71+
72+
```bash
73+
cargo install cargo-binutils rustfilt
74+
```
75+
7376
ii. Si necesitas instalar Rust desde cero:
74-
```bash
75-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
76-
77-
source $HOME/.cargo/env
78-
cargo install cargo-binutils rustfilt
79-
```
77+
78+
```bash
79+
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
80+
81+
source $HOME/.cargo/env
82+
cargo install cargo-binutils rustfilt
83+
```
8084

8185
4. En caso de que uses `Visual Studio Code`, recomiendo que instales la extensión [Rust Analyzer extension].
82-
5. (**Solo para macOS**) Instala algunas `Ruby` gems.
8386

87+
5. (**Solo para macOS**) Instala algunas `Ruby` gems.
88+
8489
Ejecuta esto en la carpeta root del repositorio:
85-
90+
8691
```bash
8792
bundle install --path .vendor/bundle --without development
8893
```
@@ -92,7 +97,7 @@ Muchas de las cosas vistas aquí también funcionan en **macOS**, pero esto solo
9297

9398
### 🧰 Más detalles: Eliminando Lios con Toolchains
9499

95-
Esta serie trata de enfocarse lo máximo posible en tener una experiencia agradable para el usario.
100+
Esta serie trata de enfocarse lo máximo posible en tener una experiencia agradable para el usuario.
96101
Por lo tanto, se han dirigido muchos esfuerzos a eliminar la parte más difícil del desarrollo de
97102
los sistemas incorporados (embedded) tanto como se pudo.
98103

@@ -102,7 +107,7 @@ con arquitectura `AArch64` será automáticamente instalado por `rustup`. Sin em
102107
el compilador de Rust, también usaremos algunas otras herramientas, entre las cuales están:
103108

104109
- `QEMU` para emular nuestro núcleo en nuestra máquina principal.
105-
- Una herramienta llamada `Minipush` para cargar el núcleo en una Raspberry Pi cuando queramos usando `UART`.
110+
- Una herramienta llamada `Minipush` para cargar el núcleo en una Raspberry Pi cuando queramos usando `UART`.
106111
- `OpenOCD` y `GDB` para hacer depuración ("debugging") en la máquina a instalar.
107112

108113
Hay muchas cosas que pueden salir mal mientras instalamos y/o compilamos las versiones correctas de cada
@@ -143,12 +148,12 @@ de [Zoltan Baldaszti](https://github.com/bztsrc). ¡Gracias por darme un punto d
143148

144149
### Traducciones de este repositorio
145150

146-
- **Chino:**
147-
- [@colachg] y [@readlnh].
148-
- Necesitan actualizaciones.
149-
- **Español:**
150-
- [@zanezhub].
151-
- En el futuro habrán tutoriales traducidos al español.
151+
- **Chino:**
152+
- [@colachg] y [@readlnh].
153+
- Necesitan actualizaciones.
154+
- **Español:**
155+
- [@zanezhub].
156+
- En el futuro habrán tutoriales traducidos al español.
152157

153158
[@colachg]: https://github.com/colachg
154159
[@readlnh]: https://github.com/readlnh
@@ -158,14 +163,11 @@ de [Zoltan Baldaszti](https://github.com/bztsrc). ¡Gracias por darme un punto d
158163

159164
Este proyecto está licenciado por cualquiera de las siguientes licencias como alguna de tus dos opciones
160165

161-
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
162-
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
163-
166+
- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) o http://www.apache.org/licenses/LICENSE-2.0)
167+
- MIT license ([LICENSE-MIT](LICENSE-MIT) o http://opensource.org/licenses/MIT)
164168

165169
### Contribución
166170

167171
A menos de que lo menciones, cualquier contribución enviada por ti para su inclusión en este trabajo,
168172
tal como se define en la licencia Apache-2.0, deberá tener doble licencia como se muestra en la parte superior, sin ningún
169173
cambio de términos o condiciones.
170-
171-

0 commit comments

Comments
 (0)