Rust ์ˆ˜ํ–‰ ์ค€๋น„

Rust ์ฝ”๋“œ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ช‡ ๊ฐ€์ง€ ์ดˆ๊ธฐํ™”๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.section .init.entry, "ax"
.global entry
entry:
    /*
     * ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ตฌ์„ฑ์„ ๋กœ๋“œํ•˜๊ณ  ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. MMU์™€ ์บ์‹œ๋ฅผ
     * ์‚ฌ์šฉ ์„ค์ •ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .
     */
 adrp x30, idmap
    msr ttbr0_el1, x30

    mov_i x30, .Lmairval
    msr mair_el1, x30

    mov_i x30, .Ltcrval
    /* ์ง€์›๋˜๋Š” PA ๋ฒ”์œ„๋ฅผ TCR_EL1.IPS์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. */
    mrs x29, id_aa64mmfr0_el1
    bfi x30, x29, #32, #4

    msr tcr_el1, x30

    mov_i x30, .Lsctlrval

    /*
     * ์ด ์ง€์  ์•ž์— ์˜ค๋Š” ๋ชจ๋“  ๋‚ด์šฉ์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ 
     * ์˜ค๋ž˜๋œ ๋กœ์ปฌ TLB ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋ฌดํšจํ™”ํ•ฉ๋‹ˆ๋‹ค.
     */
    isb
    tlbi vmalle1
    ic iallu
    dsb nsh
    isb

    /*
     * MMU์™€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก sctlr_el1์„ ๊ตฌ์„ฑํ•˜๊ณ  ์ด ์ž‘์—…์ด
     * ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ง„ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
     */
    msr sctlr_el1, x30
    isb

    /* EL1์—์„œ ํŠธ๋ž˜ํ•‘ ๋ถ€๋™ ์†Œ์ˆ˜์  ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. */
    mrs x30, cpacr_el1
    orr x30, x30, #(0x3 << 20)
    msr cpacr_el1, x30
    isb

    /* bss ์„น์…˜์„ 0์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. */
    adr_l x29, bss_begin
    adr_l x30, bss_end
0:  cmp x29, x30
    b.hs 1f
    stp xzr, xzr, [x29], #16
    b 0b

1:  /* ์Šคํƒ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. */
    adr_l x30, boot_stack_end
    mov sp, x30

    /* ์˜ˆ์™ธ ๋ฒกํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. */
    adr x30, vector_table_el1
    msr vbar_el1, x30

    /* Rust ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. */
    bl main

    /* ๋ฃจํ”„๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. */
2:  wfi
    b 2b
  • ์ด๋Š” C์˜ ๊ฒฝ์šฐ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์„œ ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  BSS๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์Šคํƒ ํฌ์ธํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • BSS(์—ญ์‚ฌ์ ์ธ ์ด์œ ๋กœ, ๋ธ”๋ก ์‹œ์ž‘ ๊ธฐํ˜ธ block starting symbol ์ด๋ผ๊ณ  ๋ถˆ๋ฆผ)๋Š” ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์—์„œ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ ์ •์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. BSS๋Š” ์‹ค์ œ๋กœ ์ด๋ฏธ์ง€์— ํฌํ•จ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋กœ๋” ํ”„๋กœ๊ทธ๋žจ์ด BSS์— ์†ํ•˜๋Š” ๋ณ€์ˆ˜๋“ค์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•  ๊ฒƒ์œผ๋กœ๊ธฐ๋Œ€ํ•˜๊ณ  ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๊ณ  ์ด๋ฏธ์ง€๊ฐ€ ๋กœ๋“œ๋˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ BSS๊ฐ€ ์ด๋ฏธ 0์œผ๋กœ ์„ค์ •๋˜์—ˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด 0์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ์ „์— MMU์™€ ์บ์‹œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์•ก์„ธ์Šค์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์•ก์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋„๋ก +strict-align์„ ์„ค์ •ํ•˜๋Š” aarch64-unknown-none ํƒ€๊ฒŸ์˜ Rust ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
    • VM์—์„œ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” VM์€ ์บ์‹œ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ง€๋œ ์ƒํƒœ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ˜๋ฉด ํ˜ธ์ŠคํŠธ์—๋Š” ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„์นญ์ด ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋ช…์‹œ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ถ”์ธก ์•ก์„ธ์Šค๋Š” ์บ์‹œ ์ฑ„์šฐ๊ธฐ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์บ์‹œ๊ฐ€ ์ •๋ฆฌ๋˜๊ฑฐ๋‚˜ VM์ด ์บ์‹œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์†์‹ค๋ฉ๋‹ˆ๋‹ค. ์บ์‹œ๋Š” VA ๋˜๋Š” IPA๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ์ฃผ์†Œ๋กœ ํ‚ค๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • ํŽธ์˜์ƒ ๊ธฐ๊ธฐ์šฉ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ์ฒ˜์Œ 1GiB, DRAM์šฉ ๋‹ค์Œ 1GiB, ๋” ๋งŽ์€ ๊ธฐ๊ธฐ๋ฅผ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ 1GiB๋ฅผ ID ๋งคํ•‘ํ•˜๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(idmap.S ์ฐธ๊ณ )์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” QEMU์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ ๋ฒกํ„ฐ(vbar_el1)๋„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๊ด€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ์ž์„ธํžˆ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.
  • ์˜ค๋Š˜ ์˜คํ›„์˜ ๋ชจ๋“  ์˜ˆ์—์„œ๋Š” ์˜ˆ์™ธ ์ˆ˜์ค€ 1(EL1)์—์„œ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์˜ˆ์™ธ ์ˆ˜์ค€์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด์— ๋”ฐ๋ผ entry.S๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.