เบชเปˆเบงเบ™เบ—เบต 4: เบเบฑเบ‡เปƒเบŠเป‰ Linux เปƒเบ™ RocketChip RISC-V

เบชเปˆเบงเบ™เบ—เบต 4: เบเบฑเบ‡เปƒเบŠเป‰ Linux เปƒเบ™ RocketChip RISC-V เปƒเบ™เบฎเบนเบš, Linux kernel เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบฑเบเบ—เบฒเบเบเบฑเบšเบ—เปˆเบฒเบ™เบœเปˆเบฒเบ™ GPIO.

เปƒเบ™เบชเปˆเบงเบ™เบ™เบตเป‰เบ‚เบญเบ‡เป€เบฅเบทเปˆเบญเบ‡เบเบฒเบ™ porting RISC-V RocketChip เบเบฑเบšเบเบฐเบ”เบฒเบ™เบˆเบตเบ™เบเบฑเบš Cyclone IV, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Linux, เปเบฅเบฐเบเบฑเบ‡เบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ IP Core เบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡เปเบฅเบฐเปเบเป‰เป„เบ‚เบฅเบฒเบเบฅเบฐเบญเบฝเบ” DTS เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ. เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เบชเบทเบšเบ•เปเปˆ เบชเปˆเบงเบ™เบ—เบตเบชเบฒเบก, เปเบ•เปˆ, เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบšเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เบžเปเบชเบปเบกเบ„เบงเบ™, เบกเบฑเบ™เบˆเบฐเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบฑเป‰เบ™.

โ€ฆ เป€เบžเบฒเบฐโ€‹เบงเปˆเบฒ setup_smp เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒ kernel เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ”เป‰เบงเบเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ SMP, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบญเบ‡เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™ multi-core. เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบชเบฐเบšเบฒเบเบ–เป‰เบฒเบ‚เป‰เบญเบเบเบฑเบ‡เบ•เป‰เบญเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ atomicity เปƒเบ™เป‚เบกเบ”เบนเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ (เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบเบฎเบนเป‰เบงเปˆเบฒ cache tinkers เบเบฑเบšเบกเบฑเบ™เป€เบญเบ‡), เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฝเบงเบกเบฑเบ™เบšเปเปˆเบ„เบงเบ™เปเบŠเบเปเบŠเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบเบฑเบ‡โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบญเบญเบ ...

[    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[    0.000000] Linux version 4.19.0-sifive-1+ (trosinenko@trosinenko-pc) (gcc version 8.3.0 (Buildroot 2019.02-07449-g4eddd28f99)) #1 Thu Jul 4 18:38:10 MSK 2019
[    0.000000] bootconsole [early0] enabled
[    0.000000] Initial ramdisk at: 0x(____ptrval____) (16777216 bytes)
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000]   Normal   [mem 0x00000000c0000000-0x00000bffffffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] software IO TLB: mapped [mem 0xbb1fc000-0xbf1fc000] (64MB)
[    0.000000] Unable to find "cpu" devicetree entry
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 258055
[    0.000000] Kernel command line: debug console=ttySIF0,125200 root=/dev/mmcblk0p2 loglevel=7 rootwait
[    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
[    0.000000] Sorting __ex_table...
[    0.000000] BUG: Bad page state in process swapper  pfn:80bf7
[    0.000000] page:ffffffe03f029e08 count:0 mapcount:-65280 mapping:0000000000000000 index:0x1
[    0.000000] flags: 0x0()
[    0.000000] raw: 0000000000000000 0000000000000100 0000000000000200 0000000000000000
[    0.000000] raw: 0000000000000001 0000000000000000 00000000ffff00ff
[    0.000000] page dumped because: nonzero mapcount
[    0.000000] Modules linked in:
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.0-sifive-1+ #1
[    0.000000] Call Trace:
[    0.000000] [<ffffffe00002cfde>] walk_stackframe+0x0/0xa0
[    0.000000] [<ffffffe00002d1da>] show_stack+0x2a/0x34
[    0.000000] [<ffffffe00063c898>] chachachllachachachTradeonachachach_inachachipachachachachllachachachTradeonachachachdevachachachypachachachllachachachTradeona+0x20/0x28
[    0.000000] [<ffffffe00009499c>] bad_page+0xe4/0x102
[    0.000000] [<ffffffe0000949f2>] free_pages_check_bad+0x38/0x7a
[    0.000000] [<ffffffe000094bb0>] free_pcppages_bulk+0x106/0x36c
[    0.000000] [<ffffffe0000957be>] free_unref_page_commit.isra.23+0x86/0x8e
[    0.000000] [<ffffffe0000960bc>] free_unref_page+0x44/0x58
[    0.000000] [<ffffffe0000960de>] __free_pages.part.28+0xe/0x22
[    0.000000] [<ffffffe0000056da>] __free_pages_bootmem+0x86/0x90
[    0.000000] [<ffffffe000007c46>] free_all_bootmem+0x156/0x1ba
[    0.000000] [<ffffffe0000023f8>] mem_init+0x36/0x44
[    0.000000] [<ffffffe0000007a0>] start_kernel+0x1aa/0x328
[    0.000000] [<ffffffe000000058>] _sinittext+0x58/0x5c
[    0.000000] Disabling lock debugging due to kernel taint
[    0.000000] BUG: Bad page state in process swapper  pfn:80bf9
[    0.000000] page:ffffffe03f029e78 count:0 mapcount:-65280 mapping:0000000000000000 index:0x0
[    0.000000] flags: 0x0()
[    0.000000] raw: 0000000000000000 ffffffe03f020080 ffffffe03f020080 0000000000000000
[    0.000000] raw: 0000000000000000 0000000000000000 00000000ffff00ff
[    0.000000] page dumped because: nonzero mapcount
[    0.000000] Modules linked in:
[    0.000000] CPU: 0 PID: 0 Comm: swapper Tainted: G    B             4.19.0-sifive-1+ #1
[    0.000000] Call Trace:
[    0.000000] [<ffffffe00002cfde>] walk_stackframe+0x0/0xa0
[    0.000000] [<ffffffe00002d1da>] show_stack+0x2a/0x34
[    0.000000] [<ffffffe00063c898>] chachachllachachachTradeonachachach_inachachipachachachachllachachachTradeonachachachdevachachachypachachachllachachachTradeona+0x20/0x28
[    0.000000] [<ffffffe00009499c>] bad_page+0xe4/0x102
[    0.000000] [<ffffffe0000949f2>] free_pages_check_bad+0x38/0x7a
[    0.000000] [<ffffffe0000955c6>] __free_pages_ok+0x3fe/0x430
[    0.000000] [<ffffffe0000960ea>] __free_pages.part.28+0x1a/0x22
[    0.000000] [<ffffffe0000056da>] __free_pages_bootmem+0x86/0x90
[    0.000000] [<ffffffe000007c46>] free_all_bootmem+0x156/0x1ba
[    0.000000] [<ffffffe0000023f8>] mem_init+0x36/0x44
[    0.000000] [<ffffffe0000007a0>] start_kernel+0x1aa/0x328
[    0.000000] [<ffffffe000000058>] _sinittext+0x58/0x5c
[    0.000000] BUG: Bad page state in process swapper  pfn:80bfa
[    0.000000] page:ffffffe03f029eb0 count:0 mapcount:-65280 mapping:0000000000000000 index:0x0
[    0.000000] flags: 0x0()
[    0.000000] raw: 0000000000000000 ffffffe03f0200b8 ffffffe03f0200b8 0000000000000000
[    0.000000] raw: 0000000000000000 0000000000000000 00000000ffff00ff
[    0.000000] page dumped because: nonzero mapcount
[    0.000000] Modules linked in:
[    0.000000] CPU: 0 PID: 0 Comm: swapper Tainted: G    B             4.19.0-sifive-1+ #1
[    0.000000] Call Trace:
[    0.000000] [<ffffffe00002cfde>] walk_stackframe+0x0/0xa0
[    0.000000] [<ffffffe00002d1da>] show_stack+0x2a/0x34
[    0.000000] [<ffffffe00063c898>] chachachllachachachTradeonachachach_inachachipachachachachllachachachTradeonachachachdevachachachypachachachllachachachTradeona+0x20/0x28
[    0.000000] [<ffffffe00009499c>] bad_page+0xe4/0x102
[    0.000000] [<ffffffe0000949f2>] free_pages_check_bad+0x38/0x7a
[    0.000000] [<ffffffe0000955c6>] __free_pages_ok+0x3fe/0x430
[    0.000000] [<ffffffe0000960ea>] __free_pages.part.28+0x1a/0x22
[    0.000000] [<ffffffe0000056da>] __free_pages_bootmem+0x86/0x90
[    0.000000] [<ffffffe000007c46>] free_all_bootmem+0x156/0x1ba
[    0.000000] [<ffffffe0000023f8>] mem_init+0x36/0x44
[    0.000000] [<ffffffe0000007a0>] start_kernel+0x1aa/0x328
[    0.000000] [<ffffffe000000058>] _sinittext+0x58/0x5c
[    0.000000] BUG: Bad page state in process swapper  pfn:80bfb
[    0.000000] page:ffffffe03f029ee8 count:0 mapcount:-65280 mapping:0000000000000000 index:0x0
[    0.000000] flags: 0x0()
[    0.000000] raw: 0000000000000000 ffffffe03f0200f0 ffffffe03f0200f0 0000000000000000
[    0.000000] raw: 0000000000000000 0000000000000000 00000000ffff00ff
[    0.000000] page dumped because: nonzero mapcount
[    0.000000] Modules linked in:
[    0.000000] CPU: 0 PID: 0 Comm: swapper Tainted: G    B             4.19.0-sifive-1+ #1
[    0.000000] Call Trace:
[    0.000000] [<ffffffe00002cfde>] walk_stackframe+0x0/0xa0
[    0.000000] [<ffffffe00002d1da>] show_stack+0x2a/0x34
[    0.000000] [<ffffffe00063c898>] chachachllachachachTradeonachachach_inachachipachachachachllachachachTradeonachachachdevachachachypachachachllachachachTradeona+0x20/0x28
[    0.000000] [<ffffffe00009499c>] bad_page+0xe4/0x102
[    0.000000] [<ffffffe0000949f2>] free_pages_check_bad+0x38/0x7a
[    0.000000] [<ffffffe0000955c6>] __free_pages_ok+0x3fe/0x430
[    0.000000] [<ffffffe0000960ea>] __free_pages.part.28+0x1a/0x22
[    0.000000] [<ffffffe0000056da>] __free_pages_bootmem+0x86/0x90
[    0.000000] [<ffffffe000007c46>] free_all_bootmem+0x156/0x1ba
[    0.000000] [<ffffffe0000023f8>] mem_init+0x36/0x44
[    0.000000] [<ffffffe0000007a0>] start_kernel+0x1aa/0x328
[    0.000000] [<ffffffe000000058>] _sinittext+0x58/0x5c
[    0.000000] BUG: Bad page state in process swapper  pfn:80bfc
[    0.000000] page:ffffffe03f029f20 count:0 mapcount:-65280 mapping:0000000000000000 index:0x0
[    0.000000] flags: 0x0()
[    0.000000] raw: 0000000000000000 ffffffe03f020028 ffffffe03f020028 0000000000000000
[    0.000000] raw: 0000000000000000 0000000000000000 00000000ffff00ff
...

เป€เบ›เบฑเบ™เบ—เบตเปˆ เปœเป‰เบฒ เบชเบปเบ™เปƒเบˆเบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เปเบเป‰เบšเบฑเบ™เบซเบฒเบ—เบฑเบ‡ เปเบปเบ” เบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เปเบเปˆเบ™ "เบญเป‰เบฒเบ‡เบญเบตเบ‡" เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”, เบฅเบฒเบงเป€เบงเบปเป‰เบฒ. make qemu, เปเบฅเบฐโ€‹เป„เบ”เป‰โ€‹เป€เบซเบฑเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เบ—เบตเปˆโ€‹เบ„เป‰เบฒเบโ€‹เบ„เบทโ€‹เบเบฑเบ™โ€‹.

เบญเบฐเบ™เบดเบˆเบฒ, เบฅเบฐเบ”เบฑเบšเบ•เปเปˆเป„เบ› (Linux kernel) เปเบกเปˆเบ™เบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ: GDB, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ JTAG เบเบฑเบš RocketChip, เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ—เบตเปˆเบขเบนเปˆเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ MMU, เปเบฅเบฐ kernel เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบปเบ™เปƒเบˆเป„เบ”เป‰เบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบเบฒเบ™เบชเบฐเปเบ”เบ‡เปเบฅเป‰เบง. เบ‚เบญเบ‡เบ—เบตเปˆเบขเบนเปˆ, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒ display/10i $pc เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบœเบปเบ™ - เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบˆเบฐโ€‹เป€เบซเบฑเบ™โ€‹เบซเบผเบฒเบโ€‹ unimp. เปเบ•เปˆเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ„เบดเบ”เบญเบญเบเปเบฅเป‰เบงเบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบ (เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ 0x80200000 -> 0xffffffe000000000), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” cheat:

1: x/10i $pc
=> 0xffffffe000002436 <setup_smp>:      unimp
   0xffffffe000002438 <setup_smp+2>:    unimp
   0xffffffe00000243a <setup_smp+4>:    unimp
   0xffffffe00000243c <setup_smp+6>:    unimp
   0xffffffe00000243e <setup_smp+8>:    unimp
   0xffffffe000002440 <setup_smp+10>:   unimp
   0xffffffe000002442 <setup_smp+12>:   unimp
   0xffffffe000002444 <setup_smp+14>:   unimp
   0xffffffe000002446 <setup_smp+16>:   unimp
   0xffffffe000002448 <setup_smp+18>:   unimp
(gdb) undisplay 1
(gdb) display/10i ($pc - 0xffffffe000002436 + 0x80202436)
2: x/10i ($pc - 0xffffffe000002436 + 0x80202436)
   0x80202436:  addi    sp,sp,-96
   0x80202438:  sd      s0,80(sp)
   0x8020243a:  sd      s1,72(sp)
   0x8020243c:  sd      s2,64(sp)
   0x8020243e:  sd      s3,56(sp)
   0x80202440:  sd      s4,48(sp)
   0x80202442:  sd      s5,40(sp)
   0x80202444:  sd      s6,32(sp)
   0x80202446:  sd      s7,24(sp)
   0x80202448:  sd      s8,16(sp)

เบˆเบธเบ”เปเบšเปˆเบ‡เปเบกเปˆเบ™เบ–เบทเบเบ•เบฑเป‰เบ‡เป„เบงเป‰เปƒเบ™เปเบšเบšเบ”เบฝเบงเบเบฑเบ™:

(gdb) p setup_smp
$1 = {<text variable, no debug info>} 0xffffffe000002436 <setup_smp>
(gdb) b *0x80202436
Breakpoint 1 at 0x80202436
(gdb) c
Continuing.

Program received signal SIGTRAP, Trace/breakpoint trap.
setup_smp () at /home/trosinenko/freedom-u-sdk/linux/arch/riscv/kernel/smpboot.c:58
58              while ((dn = of_find_node_by_type(dn, "cpu"))) {
(gdb) bt
#0  setup_smp () at /home/trosinenko/freedom-u-sdk/linux/arch/riscv/kernel/smpboot.c:58
#1  0xffffffe0000022a2 in setup_arch () at /home/trosinenko/freedom-u-sdk/linux/arch/riscv/kernel/setup.c:253
#2  0x0000000000000000 in ?? ()
Backtrace stopped: frame did not save the PC

เปเบ•เปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบญเบปเบฒเบžเบงเบเบกเบฑเบ™เบญเบญเบเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป€เบžเบทเปˆเบญเบเป‰เบฒเบงเป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒ - เบชเปเบฒเบฅเบฑเบš GDB เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบˆเบฑเปˆเบ™เบˆเบฑเบšเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™. เป‚เบญเป‰, เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเป€เบงเบปเป‰เบฒ s เบซเบผเบท n เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ si, gdb เบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเปƒเบชเปˆเบˆเบธเบ”เบขเบธเบ”เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™, เป€เบŠเบดเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบˆเบฐเบšเปเปˆเบ–เบทเบเบเปเบฒเบ™เบปเบ”, เปเบ•เปˆเบšเปเปˆเบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐ dissuade GDB. เปเบ•เปˆเบขเปˆเบฒเบŸเป‰เบฒเบงเบ—เบตเปˆเบˆเบฐเบ›เบดเบ”เป€เบ›เบตเบ”เบเบฐเบ”เบฒเบ™เปƒเบซเบกเปˆ - เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐ restart เบžเบฝเบ‡เปเบ•เปˆ gdb (เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบˆเบธเบ”เบขเบธเบ”เป€เบเบปเปˆเบฒเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบซเบฒเบเป„เบ›).

เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš: เบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡เบ‚เบญเบ‡ debugging printk เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ of_find_node_by_type, เบ—เบตเปˆเปƒเบŠเป‰เป‚เบ”เบเบฅเบฐเบซเบฑเบ”เบ„เบปเป‰เบ™เบซเบฒ kernel processor boot, เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบซเบฑเบ™เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบŠเบทเปˆเบ›เบฐเป€เบžเบ”เบญเบธเบ›เบฐเบเบญเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบฑเบ™เป€เบญเบปเบฒเป€เบชเบฑเป‰เบ™ "เบžเบญเบ” Serial" เบˆเบฒเบเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบขเบนเปˆเปƒเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบก dtb. device_type. เบกเบตเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ bytes เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบžเบฒเบš kernel, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เบžเบงเบเป€เบ‚เบปเบฒ, เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบ, เปเบฅเบฐเบฎเบฑเบšเบฎเบนเป‰เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡: เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ kernel เปƒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ boot เปเบกเปˆเบ™เบ–เบทเบเบ„เบฒเบ”เบ„เบฐเป€เบ™เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™: เบกเบฑเบ™เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™ 8Mb, เปเบ•เปˆเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบเบงเปˆเบฒเบชเบดเบš. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบˆเบฑเบ”เบชเบฑเบ™ 16Mb, เปเบ•เปˆเบ„เบงเบฒเบกเปเบ›เบเบ›เบฐเบซเบฅเบฒเบ”เบšเปเปˆเป„เบ”เป‰เบขเบธเบ”เป€เบŠเบปเบฒ. เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบ•เบฑเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบญเปˆเบฒเบ™ FDT เบˆเบฒเบเบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ (เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบขเบนเปˆเบˆเบฐเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเปเบเปˆเบ™เปƒเบ™เบ—เบฐเบšเบฝเบ™. a1), เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบธเบ”เบ—เป‰เบฒเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ•เบดเบ”เบ•เบฒเบก, เปเบ•เปˆเบงเปˆเบฒเปเบกเปˆเบ™เบซเบเบฑเบ‡ ัะตะนั‡ะฐั เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบงเบดเป€เบ„เบฒเบฐเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เป‚เบŠเบเบ”เบต, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบเปˆเบฒเบ‡เบญเป‰เบญเบกเบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบ”เบตเบšเบฑเบ (เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒเบกเบต nuances เบเบฑเบšเบเบฒเบ™เปเบ›เบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบเบฑเบ‡เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบ”เป‰เบงเบเบงเบดเบ—เบตเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบญเบทเปˆเบ™), เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เปเบฅเบฐ crutch เปƒเบ™เป„เบŸเบฅเปŒ. drivers/of/fdt.c เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™ #define pr_debug printk. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™:

เป€เบžเบตเปˆเบกเบœเบปเบ™เบ”เบตเบšเบฑเบ

diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c
index 3db0d71d128b..fac47df9d1db 100644
--- a/arch/riscv/kernel/setup.c
+++ b/arch/riscv/kernel/setup.c
@@ -173,6 +173,7 @@ asmlinkage void __init setup_vm(void)

 void __init parse_dtb(unsigned int hartid, void *dtb)
 {
+       printk("HART = %u DTB = %lxn", hartid, dtb);
        early_init_dt_scan(__va(dtb));
 }

diff --git a/drivers/of/base.c b/drivers/of/base.c
index 74eaedd5b860..c019e4158e1d 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -940,10 +940,12 @@ struct device_node *of_find_node_by_type(struct device_node *from,
        unsigned long flags;

        raw_spin_lock_irqsave(&devtree_lock, flags);
-       for_each_of_allnodes_from(from, np)
+       for_each_of_allnodes_from(from, np) {
+               printk("%lx %lx [%s] | [%s]n", from, np, np->type, type);
                if (np->type && (of_node_cmp(np->type, type) == 0)
                    && of_node_get(np))
                        break;
+       }
        of_node_put(from);
        raw_spin_unlock_irqrestore(&devtree_lock, flags);
        return np;
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 800ad252cf9c..2b45870ebada 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -31,6 +31,8 @@

 #include "of_private.h"

+#define pr_debug printk
+
 /*
  * of_fdt_limit_memory - limit the number of regions in the /memory node
  * @limit: maximum entries
@@ -1253,6 +1255,7 @@ bool __init early_init_dt_scan(void *params)
  */
 void __init unflatten_device_tree(void)
 {
+       printk("INITIAL: %lxn", initial_boot_params);
        __unflatten_device_tree(initial_boot_params, NULL, &of_root,
                                early_init_dt_alloc_memory_arch, false);

เบœเบปเบ™เบœเบฐเบฅเบดเบ”เปƒเบ™เบฎเบฒเบ”เปเบง

                SIFIVE, INC.

         5555555555555555555555555
        5555                   5555
       5555                     5555
      5555                       5555
     5555       5555555555555555555555
    5555       555555555555555555555555
   5555                             5555
  5555                               5555
 5555                                 5555
5555555555555555555555555555          55555
 55555           555555555           55555
   55555           55555           55555
     55555           5           55555
       55555                   55555
         55555               55555
           55555           55555
             55555       55555
               55555   55555
                 555555555
                   55555
                     5

           SiFive RISC-V Core IP
 {
  #address-cells = <0x00000001>;
  #size-cells = <0x00000001>;
  compatible = "freechips,rocketchip-unknown-dev";
  model = "freechips,rocketchip-unknown";
  chosen {
    linux,initrd-start = <0x82000000>;
    riscv,kernel-end = <0x81200000>;
    riscv,kernel-start = <0x80200000>;
    #address-cells = <0x00000001>;
    #size-cells = <0x00000000>;
    bootargs = <0x64656275 0x6720636f 0x6e736f6c 0x653d7474 0x79534946 0x302c3132 0x35323030 0x20726f6f 0x743d2f64 0x65762f6d 0x6d63626c 0x6b307032 0x206c6f67 0x6c657665 0x6c3d3720 0x726f6f74 0x77616974>;
  }
  firmware {
    sifive,uboot = "YYYY-MM-DD";
  }
  aliases {
    serial0 = <0x2f736f63 0x2f736572 0x69616c40 0x36343030 0x30303030>;
  }
  cpus {
    #address-cells = <0x00000001>;
    #size-cells = <0x00000000>;
    cpu@0 {
      device_type = "cpu";
      clock-frequency = <0x00000000>;
      compatible = "sifive,rocket0", "riscv";
      d-cache-block-size = <0x00000010>;
      d-cache-sets = <0x00000040>;
      d-cache-size = <0x00001000>;
      d-tlb-sets = <0x00000001>;
      d-tlb-size = <0x00000020>;
      i-cache-block-size = <0x00000010>;
      i-cache-sets = <0x00000040>;
      i-cache-size = <0x00001000>;
      i-tlb-sets = <0x00000001>;
      i-tlb-size = <0x00000020>;
      mmu-type = "riscv,sv39";
      next-level-cache = <0x00000001>;
      reg = <0x00000000>;
      riscv,isa = "rv64imafdc";
      status = "okay";
      timebase-frequency = <0x000f4240>;
      tlb-split;
      interrupt-controller {
        #interrupt-cells = <0x00000001>;
        compatible = "riscv,cpu-intc";
        interrupt-controller;
        phandle = <0x00000002>;
      }
    }
  }
  ram@80000000 {
    device_type = "memory";
    reg = <0x80000000 0x40000000>;
    reg-names = "mem";
    phandle = <0x00000001>;
  }
  soc {
    #address-cells = <0x00000001>;
    #size-cells = <0x00000001>;
    compatible = "freechips,rocketchip-unknown-soc", "simple-bus";
    ranges;
    clint@2000000 {
      compatible = "riscv,clint0";
      interrupts-extended = <0x00000002 0x00000003 0x00000002 0x00000007>;
      reg = <0x02000000 0x00010000>;
      reg-names = "control";
    }
    debug-controller@0 {
      compatible = "sifive,debug-013", "riscv,debug-013";
      interrupts-extended = <0x00000002 0x0000ffff>;
      reg = <0x00000000 0x00001000>;
      reg-names = "control";
    }
    gpio@64002000 {
      #gpio-cells = <0x00000002>;
      #interrupt-cells = <0x00000002>;
      compatible = "sifive,gpio0";
      gpio-controller;
      interrupt-controller;
      interrupt-parent = <0x00000003>;
      interrupts = <0x00000003 0x00000004 0x00000005 0x00000006 0x00000007 0x00000008>;
      reg = <0x64002000 0x00001000>;
      reg-names = "control";
    }
    interrupt-controller@c000000 {
      #interrupt-cells = <0x00000001>;
      compatible = "riscv,plic0";
      interrupt-controller;
      interrupts-extended = <0x00000002 0x0000000b 0x00000002 0x00000009>;
      reg = <0x0c000000 0x04000000>;
      reg-names = "control";
      riscv,max-priority = <0x00000007>;
      riscv,ndev = <0x00000008>;
      phandle = <0x00000003>;
    }
    rom@10000 {
      compatible = "sifive,maskrom0";
      reg = <0x00010000 0x00002000>;
      reg-names = "mem";
    }
    serial@64000000 {
      compatible = "sifive,uart0";
      interrupt-parent = <0x00000003>;
      interrupts = <0x00000002>;
      reg = <0x64000000 0x00001000>;
      reg-names = "control";
    }
    spi@64001000 {
      #address-cells = <0x00000001>;
      #size-cells = <0x00000000>;
      compatible = "sifive,spi0";
      interrupt-parent = <0x00000003>;
      interrupts = <0x00000001>;
      reg = <0x64001000 0x00001000>;
      reg-names = "control";
      mmc@0 {
        compatible = "mmc-spi-slot";
        disable-wp;
        reg = <0x00000000>;
        spi-max-frequency = <0x01312d00>;
        voltage-ranges = <0x00000ce4 0x00000ce4>;
      }
    }
    tlclk {
      #clock-cells = <0x00000000>;
      clock-frequency = <0x017d7840>;
      clock-output-names = "tlclk";
      compatible = "fixed-clock";
    }
  }
}
[    0.000000] HART = 0 DTB = 81200000
[    0.000000] search "chosen", depth: 0, uname:
[    0.000000] search "chosen", depth: 1, uname: chosen
[    0.000000] Looking for initrd properties...
[    0.000000] Command line is: debug console=ttySIF0,125200 root=/dev/mmcblk0p2 loglevel=7 rootwait
[    0.000000] dt_root_size_cells = 1
[    0.000000] dt_root_addr_cells = 1
[    0.000000] memory scan node ram@80000000, reg size 8,
[    0.000000]  - 80000000 ,  40000000
[    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[    0.000000] Linux version 4.19.0-sifive-1+ (trosinenko@trosinenko-pc) (gcc version 8.3.0 (Buildroot 2019.02-07449-g4eddd28f99)) #1 SMP Sat Jul 6 12:14:41 MSK 2019
[    0.000000] bootconsole [early0] enabled
[    0.000000] initrd not found or empty - disabling initrd
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000]   Normal   [mem 0x00000000c0000000-0x00000bffffffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] INITIAL: ffffffe001000000
[    0.000000]  -> unflatten_device_tree()
[    0.000000] Unflattening device tree:
[    0.000000] magic: d00dfeed
[    0.000000] size: 00001000
[    0.000000] version: 00000011
[    0.000000]   size is 13512, allocating...
[    0.000000]   unflattening (____ptrval____)...
[    0.000000] fixed up name for  ->
[    0.000000] fixed up name for chosen -> chosen
[    0.000000] fixed up name for firmware -> firmware
[    0.000000] fixed up name for aliases -> aliases
[    0.000000] fixed up name for cpus -> cpus
[    0.000000] fixed up name for cpu@0 -> cpu
[    0.000000] fixed up name for interrupt-controller -> interrupt-controller
[    0.000000] fixed up name for ram@80000000 -> ram
[    0.000000] fixed up name for soc -> soc
[    0.000000] fixed up name for clint@2000000 -> clint
[    0.000000] fixed up name for debug-controller@0 -> debug-controller
[    0.000000] fixed up name for gpio@64002000 -> gpio
[    0.000000] fixed up name for interrupt-controller@c000000 -> interrupt-controller
[    0.000000] fixed up name for rom@10000 -> rom
[    0.000000] fixed up name for serial@64000000 -> serial
[    0.000000] fixed up name for spi@64001000 -> spi
[    0.000000] fixed up name for mmc@0 -> mmc
[    0.000000] fixed up name for tlclk -> tlclk
[    0.000000]  <- unflatten_device_tree()
[    0.000000] software IO TLB: mapped [mem 0xbb1fc000-0xbf1fc000] (64MB)
[    0.000000] 0 ffffffe03effcab0 [attach() failed for %s with error %d
[    0.000000] ] | [cpu]
[    0.000000] 0 ffffffe03eff0020 [(null)] | [cpu]

เบชเบปเปˆเบ‡เบญเบญเบเป„เบ›เบเบฑเบ‡ QEMU

                SIFIVE, INC.
5555555555555555555555555
5555                   5555
5555                     5555
5555                       5555
5555       5555555555555555555555
5555       555555555555555555555555
5555                             5555
5555                               5555
5555                                 5555
5555555555555555555555555555          55555
55555           555555555           55555
55555           55555           55555
55555           5           55555
55555                   55555
55555               55555
55555           55555
55555       55555
55555   55555
555555555
55555
5
SiFive RISC-V Core IP
{
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
compatible = "riscv-virtio";
model = "riscv-virtio,qemu";
chosen {
linux,initrd-start = <0x00000000 0x88000000>;
linux,initrd-end = <0x00000000 0x88442b86>;
riscv,kernel-start = <0x00000000 0x80200000>;
riscv,kernel-end = <0x00000000 0x80c482ac>;
bootargs = "";
stdout-path = <0x2f756172 0x74403130 0x30303030>;
}
uart@10000000 {
interrupts = <0x0000000a>;
interrupt-parent = <0x00000002>;
clock-frequency = <0x00384000>;
reg = <0x00000000 0x10000000 0x00000000 0x00000100>;
compatible = "ns16550a";
}
test@100000 {
reg = <0x00000000 0x00100000 0x00000000 0x00001000>;
compatible = "sifive,test0";
}
virtio_mmio@10008000 {
interrupts = <0x00000008>;
interrupt-parent = <0x00000002>;
reg = <0x00000000 0x10008000 0x00000000 0x00001000>;
compatible = "virtio,mmio";
}
virtio_mmio@10007000 {
interrupts = <0x00000007>;
interrupt-parent = <0x00000002>;
reg = <0x00000000 0x10007000 0x00000000 0x00001000>;
compatible = "virtio,mmio";
}
virtio_mmio@10006000 {
interrupts = <0x00000006>;
interrupt-parent = <0x00000002>;
reg = <0x00000000 0x10006000 0x00000000 0x00001000>;
compatible = "virtio,mmio";
}
virtio_mmio@10005000 {
interrupts = <0x00000005>;
interrupt-parent = <0x00000002>;
reg = <0x00000000 0x10005000 0x00000000 0x00001000>;
compatible = "virtio,mmio";
}
virtio_mmio@10004000 {
interrupts = <0x00000004>;
interrupt-parent = <0x00000002>;
reg = <0x00000000 0x10004000 0x00000000 0x00001000>;
compatible = "virtio,mmio";
}
virtio_mmio@10003000 {
interrupts = <0x00000003>;
interrupt-parent = <0x00000002>;
reg = <0x00000000 0x10003000 0x00000000 0x00001000>;
compatible = "virtio,mmio";
}
virtio_mmio@10002000 {
interrupts = <0x00000002>;
interrupt-parent = <0x00000002>;
reg = <0x00000000 0x10002000 0x00000000 0x00001000>;
compatible = "virtio,mmio";
}
virtio_mmio@10001000 {
interrupts = <0x00000001>;
interrupt-parent = <0x00000002>;
reg = <0x00000000 0x10001000 0x00000000 0x00001000>;
compatible = "virtio,mmio";
}
cpus {
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
timebase-frequency = <0x00989680>;
cpu@0 {
device_type = "cpu";
reg = <0x00000000>;
status = "okay";
compatible = "riscv";
riscv,isa = "rv64imafdcsu";
mmu-type = "riscv,sv48";
clock-frequency = <0x3b9aca00>;
interrupt-controller {
#interrupt-cells = <0x00000001>;
interrupt-controller;
compatible = "riscv,cpu-intc";
linux,phandle = <0x00000001>;
phandle = <0x00000001>;
}
}
}
memory@80000000 {
device_type = "memory";
reg = <0x00000000 0x80000000 0x00000000 0x40000000>;
}
soc {
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
compatible = "simple-bus";
ranges;
pci@30000000 {
interrupt-map-mask = <0x00001800 0x00000000 0x00000000 0x00000007>;
interrupt-map = <0x00000000 0x00000000 0x00000000 0x00000001 0x00000002 0x00000020 0x00000000 0x00000000 0x00000000 0x00000002 0x00000002 0x00000021 0x00000000 0x00000000 0x00000000 0x00000003 0x00000002 0x00000022 0x00000000 0x00000000 0x00000000 0x00000004 0x00000002 0x00000023 0x00000800 0x00000000 0x00000000 0x00000001 0x00000002 0x00000021 0x00000800 0x00000000 0x00000000 0x00000002 0x00000002 0x00000022 0x00000800 0x00000000 0x00000000 0x00000003 0x00000002 0x00000023 0x00000800 0x00000000 0x00000000 0x00000004 0x00000002 0x00000020 0x00001000 0x00000000 0x00000000 0x00000001 0x00000002 0x00000022 0x00001000 0x00000000 0x00000000 0x00000002 0x00000002 0x00000023 0x00001000 0x00000000 0x00000000 0x00000003 0x00000002 0x00000020 0x00001000 0x00000000 0x00000000 0x00000004 0x00000002 0x00000021 0x00001800 0x00000000 0x00000000 0x00000001 0x00000002 0x00000023 0x00001800 0x00000000 0x00000000 0x00000002 0x00000002 0x00000020 0x00001800 0x00000000 0x00000000 0x00000003 0x00000002 0x00000021 0x00001800 0x00000000 0x00000000 0x00000004 0x00000002 0x00000022>;
ranges = <0x01000000 0x00000000 0x00000000 0x00000000 0x03000000 0x00000000 0x00010000 0x02000000 0x00000000 0x40000000 0x00000000 0x40000000 0x00000000 0x40000000>;
reg = <0x00000000 0x30000000 0x00000000 0x10000000>;
dma-coherent;
bus-range = <0x00000000 0x000002ff>;
linux,pci-domain = <0x00000000>;
device_type = "pci";
compatible = "pci-host-ecam-generic";
#size-cells = <0x00000002>;
#interrupt-cells = <0x00000001>;
#address-cells = <0x00000003>;
}
interrupt-controller@c000000 {
linux,phandle = <0x00000002>;
phandle = <0x00000002>;
riscv,ndev = <0x00000035>;
riscv,max-priority = <0x00000007>;
reg-names = "control";
reg = <0x00000000 0x0c000000 0x00000000 0x04000000>;
interrupts-extended = <0x00000001 0x0000000b 0x00000001 0x00000009>;
interrupt-controller;
compatible = "riscv,plic0";
#interrupt-cells = <0x00000001>;
#address-cells = <0x00000000>;
}
clint@2000000 {
interrupts-extended = <0x00000001 0x00000003 0x00000001 0x00000007>;
reg = <0x00000000 0x02000000 0x00000000 0x00010000>;
compatible = "riscv,clint0";
}
}
}
[    0.000000] HART = 0 DTB = 80e00000
[    0.000000] search "chosen", depth: 0, uname:
[    0.000000] search "chosen", depth: 1, uname: chosen
[    0.000000] Looking for initrd properties...
[    0.000000] initrd_start=0x88000000  initrd_end=0x88442b86
[    0.000000] Command line is: earlyprintk
[    0.000000] dt_root_size_cells = 2
[    0.000000] dt_root_addr_cells = 2
[    0.000000] memory scan node memory@80000000, reg size 16,
[    0.000000]  - 80000000 ,  40000000
[    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[    0.000000] Linux version 4.19.0-sifive-1+ (trosinenko@trosinenko-pc) (gcc version 8.3.0 (Buildroot 2019.02-07449-g4eddd28f99)) #1 SMP Sat Jul 6 12:14:41 MSK 2019
[    0.000000] bootconsole [early0] enabled
[    0.000000] Initial ramdisk at: 0x(____ptrval____) (4467590 bytes)
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000]   Normal   [mem 0x00000000c0000000-0x00000bffffffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] INITIAL: ffffffe000c00000
[    0.000000]  -> unflatten_device_tree()
[    0.000000] Unflattening device tree:
[    0.000000] magic: d00dfeed
[    0.000000] size: 00000d56
[    0.000000] version: 00000011
[    0.000000]   size is 14192, allocating...
[    0.000000]   unflattening (____ptrval____)...
[    0.000000] fixed up name for  ->
[    0.000000] fixed up name for chosen -> chosen
[    0.000000] fixed up name for uart@10000000 -> uart
[    0.000000] fixed up name for test@100000 -> test
[    0.000000] fixed up name for virtio_mmio@10008000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10007000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10006000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10005000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10004000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10003000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10002000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10001000 -> virtio_mmio
[    0.000000] fixed up name for cpus -> cpus
[    0.000000] fixed up name for cpu@0 -> cpu
[    0.000000] fixed up name for interrupt-controller -> interrupt-controller
[    0.000000] fixed up name for memory@80000000 -> memory
[    0.000000] fixed up name for soc -> soc
[    0.000000] fixed up name for pci@30000000 -> pci
[    0.000000] fixed up name for interrupt-controller@c000000 -> interrupt-controller
[    0.000000] fixed up name for clint@2000000 -> clint
[    0.000000]  <- unflatten_device_tree()
[    0.000000] software IO TLB: mapped [mem 0xbb1fc000-0xbf1fc000] (64MB)
[    0.000000] 0 ffffffe03effc808 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effca78 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effcd98 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd068 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd230 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd4b8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd740 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd9c8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effdc50 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effded8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe160 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe3e8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe670 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe888 [cpu] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03effec00 [<NULL>] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03effeee8 [memory] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03efff0b0 [<NULL>] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03efff320 [pci] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03efff858 [<NULL>] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03efffd58 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effc808 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effca78 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effcd98 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd068 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd230 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd4b8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd740 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd9c8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effdc50 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effded8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe160 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe3e8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe670 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe888 [cpu] | [cpu]
[    0.000000] elf_hwcap is 0x112d
[    0.000000] percpu: Embedded 17 pages/cpu @(____ptrval____) s29400 r8192 d32040 u69632
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 258055
[    0.000000] Kernel command line: earlyprintk
[    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
[    0.000000] Sorting __ex_table...
[    0.000000] Memory: 949716K/1046528K available (6565K kernel code, 342K rwdata, 2564K rodata, 208K init, 832K bss, 96812K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu:     RCU event tracing is enabled.
[    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
[    0.000000] plic: mapped 53 interrupts to 2 (out of 2) handlers.
[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns
[    0.000000] Console: colour dummy device 80x25
[    0.000000] console [tty0] enabled
[    0.000000] bootconsole [early0] disabled
[    0.000000] HART = 0 DTB = 80e00000
[    0.000000] search "chosen", depth: 0, uname:
[    0.000000] search "chosen", depth: 1, uname: chosen
[    0.000000] Looking for initrd properties...
[    0.000000] initrd_start=0x88000000  initrd_end=0x88442b86
[    0.000000] Command line is: earlyprintk
[    0.000000] dt_root_size_cells = 2
[    0.000000] dt_root_addr_cells = 2
[    0.000000] memory scan node memory@80000000, reg size 16,
[    0.000000]  - 80000000 ,  40000000
[    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[    0.000000] Linux version 4.19.0-sifive-1+ (trosinenko@trosinenko-pc) (gcc version 8.3.0 (Buildroot 2019.02-07449-g4eddd28f99)) #1 SMP Sat Jul 6 12:14:41 MSK 2019
[    0.000000] bootconsole [early0] enabled
[    0.000000] Initial ramdisk at: 0x(____ptrval____) (4467590 bytes)
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000]   Normal   [mem 0x00000000c0000000-0x00000bffffffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] INITIAL: ffffffe000c00000
[    0.000000]  -> unflatten_device_tree()
[    0.000000] Unflattening device tree:
[    0.000000] magic: d00dfeed
[    0.000000] size: 00000d56
[    0.000000] version: 00000011
[    0.000000]   size is 14192, allocating...
[    0.000000]   unflattening (____ptrval____)...
[    0.000000] fixed up name for  ->
[    0.000000] fixed up name for chosen -> chosen
[    0.000000] fixed up name for uart@10000000 -> uart
[    0.000000] fixed up name for test@100000 -> test
[    0.000000] fixed up name for virtio_mmio@10008000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10007000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10006000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10005000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10004000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10003000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10002000 -> virtio_mmio
[    0.000000] fixed up name for virtio_mmio@10001000 -> virtio_mmio
[    0.000000] fixed up name for cpus -> cpus
[    0.000000] fixed up name for cpu@0 -> cpu
[    0.000000] fixed up name for interrupt-controller -> interrupt-controller
[    0.000000] fixed up name for memory@80000000 -> memory
[    0.000000] fixed up name for soc -> soc
[    0.000000] fixed up name for pci@30000000 -> pci
[    0.000000] fixed up name for interrupt-controller@c000000 -> interrupt-controller
[    0.000000] fixed up name for clint@2000000 -> clint
[    0.000000]  <- unflatten_device_tree()
[    0.000000] software IO TLB: mapped [mem 0xbb1fc000-0xbf1fc000] (64MB)
[    0.000000] 0 ffffffe03effc808 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effca78 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effcd98 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd068 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd230 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd4b8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd740 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd9c8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effdc50 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effded8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe160 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe3e8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe670 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe888 [cpu] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03effec00 [<NULL>] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03effeee8 [memory] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03efff0b0 [<NULL>] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03efff320 [pci] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03efff858 [<NULL>] | [cpu]
[    0.000000] ffffffe03effe888 ffffffe03efffd58 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effc808 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effca78 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effcd98 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd068 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd230 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd4b8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd740 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effd9c8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effdc50 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effded8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe160 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe3e8 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe670 [<NULL>] | [cpu]
[    0.000000] 0 ffffffe03effe888 [cpu] | [cpu]
[    0.000000] elf_hwcap is 0x112d
[    0.000000] percpu: Embedded 17 pages/cpu @(____ptrval____) s29400 r8192 d32040 u69632
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 258055
[    0.000000] Kernel command line: earlyprintk
[    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
[    0.000000] Sorting __ex_table...
[    0.000000] Memory: 949716K/1046528K available (6565K kernel code, 342K rwdata, 2564K rodata, 208K init, 832K bss, 96812K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu:     RCU event tracing is enabled.
[    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
[    0.000000] plic: mapped 53 interrupts to 2 (out of 2) handlers.
[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x24e6a1710, max_idle_ns: 440795202120 ns
[    0.000000] Console: colour dummy device 80x25
[    0.000000] console [tty0] enabled
[    0.000000] bootconsole [early0] disabled
[    0.000000] Calibrating delay loop (skipped), value calculated using timer frequency.. 20.00 BogoMIPS (lpj=100000)
[    0.000000] pid_max: default: 32768 minimum: 301
[    0.000000] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
[    0.000000] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
[    0.020000] rcu: Hierarchical SRCU implementation.
[    0.020000] smp: Bringing up secondary CPUs ...
[    0.020000] smp: Brought up 1 node, 1 CPU
[    0.050000] devtmpfs: initialized
[    0.050000] 0 ffffffe03effc808 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effca78 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effcd98 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effd068 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effd230 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effd4b8 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effd740 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effd9c8 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effdc50 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effded8 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effe160 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effe3e8 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effe670 [<NULL>] | [cpu]
[    0.050000] 0 ffffffe03effe888 [cpu] | [cpu]
[    0.050000] random: get_random_u32 called from bucket_table_alloc+0x76/0x17a with crng_init=0
[    0.050000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.050000] futex hash table entries: 256 (order: 2, 16384 bytes)
[    0.060000] NET: Registered protocol family 16
[    0.090000] vgaarb: loaded
[    0.090000] SCSI subsystem initialized
[    0.090000] usbcore: registered new interface driver usbfs
[    0.090000] usbcore: registered new interface driver hub
[    0.090000] usbcore: registered new device driver usb
[    0.090000] pps_core: LinuxPPS API ver. 1 registered
[    0.090000] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[    0.090000] PTP clock support registered
[    0.100000] Advanced Linux Sound Architecture Driver Initialized.
[    0.100000] clocksource: Switched to clocksource riscv_clocksource
[    0.110000] NET: Registered protocol family 2
[    0.110000] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes)
[    0.110000] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[    0.110000] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)
[    0.110000] TCP: Hash tables configured (established 8192 bind 8192)
[    0.110000] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    0.110000] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    0.110000] NET: Registered protocol family 1
[    0.120000] Unpacking initramfs...
[    0.590000] workingset: timestamp_bits=62 max_order=18 bucket_order=0
[    0.620000] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[    0.620000] io scheduler noop registered
[    0.620000] io scheduler deadline registered
[    0.620000] io scheduler cfq registered (default)
[    0.620000] io scheduler mq-deadline registered
[    0.620000] io scheduler kyber registered
[    0.620000] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    0.690000] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.690000] 10000000.uart: ttyS0 at MMIO 0x10000000 (irq = 10, base_baud = 230400) is a 16550A
[    0.720000] console [ttyS0] enabled
[    0.720000] [drm] radeon kernel modesetting enabled.
[    0.720000] [drm] amdgpu kernel modesetting enabled.
[    0.730000] loop: module loaded
[    0.730000] libphy: Fixed MDIO Bus: probed
[    0.740000] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    0.740000] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    0.740000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    0.740000] ehci-pci: EHCI PCI platform driver
[    0.740000] ehci-platform: EHCI generic platform driver
[    0.740000] mousedev: PS/2 mouse device common for all mice
[    0.740000] usbcore: registered new interface driver usbhid
[    0.740000] usbhid: USB HID core driver
[    0.740000] usbcore: registered new interface driver snd-usb-audio
[    0.740000] NET: Registered protocol family 10
[    0.750000] Segment Routing with IPv6
[    0.750000] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    0.750000] NET: Registered protocol family 17
[    0.750000] Key type dns_resolver registered
[    0.760000] ALSA device list:
[    0.760000]   No soundcards found.
[    0.770000] Freeing unused kernel memory: 208K
[    0.770000] This architecture does not have kernel memory protection.
[    0.770000] Run /init as init process

(เป€เบชเบฑเป‰เบ™ "เบชเบฐเปเบ•เบกเป€เบงเบฅเบฒ" เปเบกเปˆเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบเปเบเปˆเบ™, เบขเบนเปˆเบ—เบฒเบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เปเบกเปˆเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบ BBL) เปƒเบ™เบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡, FDT เป„เบ”เป‰เบ–เบทเบเบญเปˆเบฒเบ™เบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™, เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ ". เบงเบฑเบ”เบ–เบธโ€ เบ•เบปเป‰เบ™เป„เบกเป‰.

เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ‚เบฐโ€‹เบšเบงเบ™โ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบฎเบนเป‰โ€‹เบงเปˆเบฒ BBL เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบญเปˆเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆ "เบชเบญเบ‡โ€‹"โ€‹, เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹, เปเบ•เปˆโ€‹เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบฎเบฒเบโ€‹เบ‚เบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป„เบ”เป‰โ€‹. #address-cells = <1>; #size-cells = <1>;.

เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบœเบปเบ™เบเบฒเบ™เบ”เบตเบšเบฑเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบซเบฑเบ™เบ•เบปเบงเบŠเบตเป‰เป„เบ› type ะธ name "เบ–เบทเบเบ—เบธเบšเบ•เบต", เปเบฅเบฐเปƒเบ™เบ—เบฒเบ‡เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบฅเบฒเบ”: byte เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ (เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบชเบนเบ™) เบ–เบทเบเบ•เบฑเป‰เบ‡เปƒเบซเบกเปˆเป€เบ›เบฑเบ™เบชเบนเบ™, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™: 0xabcdef -> 0xab00ef. เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เปƒเบŠเป‰เบเบปเบ™เบฅเบฐเบเบธเบ”เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบ: เบเบฒเบ™เบฎเบนเป‰เบ—เบตเปˆเบขเบนเปˆเบšเปˆเบญเบ™เบ—เบตเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเป€เบชเบเบซเบฒเบ, เป€เบžเบตเปˆเบกเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ printk เบžเบดเบกเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰. เบ”เบต, เบชเบดเปˆเบ‡เบ—เป‰เบฒเบ—เบฒเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ printk เบเบฐเปเบˆเบเบเบฐเบˆเบฒเบเบžเบงเบเป€เบ‚เบปเบฒเบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เบญเบฐเบ™เบดเบˆเบฒ, เบกเบฑเบ™เบšเปเปˆเบˆเบฐเปเบˆเป‰เบ‡เบเบงเปˆเบฒเบ™เบตเป‰. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ›เบถเบเบชเบฒเบซเบฒเบฅเบท disassembled เป„เบ”เป‰ objdump เบชเบฐเบšเบฑเบš, เบเปเบฒเบ™เบปเบ”เบˆเบธเบ”เบขเบธเบ”เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เปเบฅเบฐเบœเปˆเบฒเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบกเบตเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เป‚เบ”เบเบ‚เบฑเป‰เบ™เบ•เบญเบ™. เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบฅเบถเบเบฅเบฑเบšเปเบฅเบฐเบšเปเปˆเบซเบ™เป‰เบฒเบžเปเปƒเบˆเป„เบ”เป‰เบ–เบทเบเบ„เบปเป‰เบ™เบžเบปเบš: เบ–เป‰เบฒเบ‚เป‰เบญเบเบ•เบฑเป‰เบ‡เบˆเบธเบ”เบขเบธเบ”เบ—เบฑเบ™เบ—เบตเบšเปˆเบญเบ™เบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป„เบเบˆเบฒเบเบฅเบฑเบ”เบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบ”เบต, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบขเบธเบ”เบกเบฑเบ™, เบ‚เป‰เบญเบเบˆเบฐเป€เบซเบฑเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเป€เบชเบเบซเบฒเบเปเบฅเป‰เบง. เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบ‡เบฝเบšเป†เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบ™เบฒเบ‡, เปเบกเบ‡เป„เบกเป‰เบˆเบฐเบŠเปˆเบญเบ™เบขเบนเปˆ! เบกเบฑเบ™เบกเบตเบเบดเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเปเบ•เบเบซเบฑเบเปเบฅเบฐ cache เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰เบ„เปˆเบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€ฆ

เบเบฒเบ™เบ›เปˆเบฝเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒ

เบเบฒเบ™เบเบถเบ”เบ•เบดเบ”เบเบฑเบšเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบšเปเปˆเบขเบนเปˆเบ‚เป‰เบฒเบ‡เบ‚เป‰เบญเบ, เบ‚เป‰เบญเบเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบšเบฒเบ‡เบ—เบตเบ‚เป‰เบญเบเบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป‰เบฎเบฑเบšเปเบœเปˆเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเปเบ•เบเบซเบฑเบ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบทเปˆเป„เบ”เป‰เบงเปˆเบฒ netbook เบญเบฒเบเบธเบชเบดเบšเบ›เบตเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเป€เบ„เบทเปˆเบญเบ™เบ—เบตเปˆ, เปเบ•เปˆเบเบฑเบ‡เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ„เปˆเบฒเบ‚เบญเบ‡ DDR2 SO-DIMM. เป€เบ›เบฑเบ™เป‚เบšเบ™เบฑเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบญเบญเบเบˆเบฒเบเบเบฐเบ”เบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบกเบฑเบ™เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบš Memtest เป€เบžเบทเปˆเบญเบงเบฒเบ‡เบชเบฒเบเป€เบเบทเบญเบšเบ—เบฑเบ™เบ—เบต (Linux, เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เป‚เบซเบฅเบ”เป€เบเบทเบญเบšเบเบฑเบšเปเบเบฐเบเบฒเบŸเบดเบ. เปเบ•เปˆเบกเบฑเบ™เบเปเปˆเบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ™เบตเป‰เบญเบตเบเบ„เบฑเป‰เบ‡เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบซเป‰เบ„เบธเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปเบœเปˆเบ™เบ—เบตเปˆเบ•เบดเบ”เบขเบนเปˆ ...). เปƒเบ™เบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบš netbook เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ™เบตเป‰. เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบฅเบฒเบงเบชเบฒเบกเบฒเบ”เปƒเบชเปˆเป€เบเบตเบšเป„เบ”เป‰! เบกเบตเบ„เบงเบฒเบกเบซเบงเบฑเบ‡เบงเปˆเบฒเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบžเบฝเบ‡เปเบ•เปˆ "เปเบ•เบเบซเบฑเบ", เปเบฅเบฐเบšเบฑเบ™เบซเบฒเบšเปเปˆเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เบซเปเปˆเบ‚เบญเบ‡เบ‚เป‰เบญเบ.

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบžเบฐเบเบฒเบเบฒเบกเป€เบ›เบตเบ”เบŠเบปเปˆเบงเบ„เบฒเบงเบ”เป‰เบงเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ netbook. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, Quartus 18 เบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบเบปเบเบฅเบฐเบ”เบฑเบš IP Core เบ™เบตเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เปเบเป‰เป„เบ‚เป„เบ”เป‰. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบงเบฅเบฒเบชเบธเบ”เบ—เป‰เบฒเบเป„เบ”เป‰เบกเบฒเป€เบ–เบดเบ‡เบ—เบตเปˆเบˆเบฐเบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบซเบกเปˆ. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ: เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เบฅเบฒเบเบเบฒเบ™ IP เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบเบฒเบ™ DDR2 SDRAM Controller เบเบฑเบš ALTEMPHY Intel FPGA IP เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ•เบฑเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเปˆเบญเบ™. เบšเบฑเบ™เบซเบฒเบžเบฝเบ‡เปเบ•เปˆเปเบกเปˆเบ™เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เป„เบ”เป‰เบฎเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ

เบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบกเบ”เบนเบ™: เบญเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบˆเบฒเบ SPD. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบ–เป‰เบฒเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ—เบปเปˆเบงเป„เบ›เบญเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™ SPD เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบกเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบซเบฑเบเบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™ netbook เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปเบฅเบฐเปƒเบชเปˆเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡.

เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฎเบฑเบ”เปƒเบ™ Ubuntu เบ‡เปˆเบฒเบเบ”เบฒเบเบซเบผเบฒเบ: เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบธเบ” i2c-tools, เป‚เบซเบผเบ”เป‚เบกเบ”เบนเบ™ eeprom ะธ i2c-i801 (เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ‚เป‰เบญเบเบšเปเปˆเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ„เบปเบ™เบ‚เบฑเบšเบ—เบตเบชเบญเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡), เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบฅเปˆเบ™ decode-dimms:

decode-dimms เบœเบปเบ™เบœเบฐเบฅเบดเบ”

# decode-dimms version 6231 (2014-02-20 10:54:34 +0100)
Memory Serial Presence Detect Decoder
By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner,
Jean Delvare, Trent Piepho and others
Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0050
Guessing DIMM is in                             bank 1
---=== SPD EEPROM Information ===---
EEPROM Checksum of bytes 0-62                   OK (0x00)
SPD Revision                                    Invalid
Fundamental Memory type                         Unknown (0x00)
---=== Manufacturing Information ===---
Manufacturer                                    Undefined
Part Number                                     Undefined
Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/4-0050
Guessing DIMM is in                             bank 1
---=== SPD EEPROM Information ===---
EEPROM Checksum of bytes 0-62                   OK (0x00)
SPD Revision                                    Invalid
Fundamental Memory type                         Unknown (0x00)
---=== Manufacturing Information ===---
Manufacturer                                    Undefined
Part Number                                     Undefined
Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/6-0050
Guessing DIMM is in                             bank 1
---=== SPD EEPROM Information ===---
EEPROM Checksum of bytes 0-62                   OK (0x76)
# of bytes written to SDRAM EEPROM              128
Total number of bytes in EEPROM                 256
Fundamental Memory type                         DDR2 SDRAM
SPD Revision                                    1.2
---=== Memory Characteristics ===---
Maximum module speed                            800 MHz (PC2-6400)
Size                                            1024 MB
Banks x Rows x Columns x Bits                   8 x 13 x 10 x 64
Ranks                                           2
SDRAM Device Width                              16 bits
Module Height                                   30.0 mm
Module Type                                     SO-DIMM (67.6 mm)
DRAM Package                                    Planar
Voltage Interface Level                         SSTL 1.8V
Module Configuration Type                       No Parity
Refresh Rate                                    Reduced (7.8 us) - Self Refresh
Supported Burst Lengths                         4, 8
tCL-tRCD-tRP-tRAS                               6-6-6-18
Supported CAS Latencies (tCL)                   6T, 5T, 4T
Minimum Cycle Time                              2.50 ns at CAS 6 (tCK min)
3.00 ns at CAS 5
3.75 ns at CAS 4
Maximum Access Time                             0.40 ns at CAS 6 (tAC)
0.45 ns at CAS 5
0.50 ns at CAS 4
Maximum Cycle Time (tCK max)                    8.00 ns
---=== Timing Parameters ===---
Address/Command Setup Time Before Clock (tIS)   0.17 ns
Address/Command Hold Time After Clock (tIH)     0.25 ns
Data Input Setup Time Before Strobe (tDS)       0.05 ns
Data Input Hold Time After Strobe (tDH)         0.12 ns
Minimum Row Precharge Delay (tRP)               15.00 ns
Minimum Row Active to Row Active Delay (tRRD)   10.00 ns
Minimum RAS# to CAS# Delay (tRCD)               15.00 ns
Minimum RAS# Pulse Width (tRAS)                 45.00 ns
Write Recovery Time (tWR)                       15.00 ns
Minimum Write to Read CMD Delay (tWTR)          7.50 ns
Minimum Read to Pre-charge CMD Delay (tRTP)     7.50 ns
Minimum Active to Auto-refresh Delay (tRC)      60.00 ns
Minimum Recovery Delay (tRFC)                   127.50 ns
Maximum DQS to DQ Skew (tDQSQ)                  0.20 ns
Maximum Read Data Hold Skew (tQHS)              0.30 ns
---=== Manufacturing Information ===---
Manufacturer                                    Samsung
Manufacturing Location Code                     0x02
Part Number                                     M4 70T2864QZ3-CF7
Revision Code                                   0x3351
Manufacturing Date                              2009-W34
Assembly Serial Number                          0x79C64E9A
Number of SDRAM DIMMs detected and decoded: 3

เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบšเบฒเบ‡เป€เบงเบฅเบฒเบšเปเปˆเป„เบ”เป‰เบŠเบตเป‰เบšเบญเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เป€เบญเบปเบฒเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเบชเบญเบ‡.

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฝเบ™เบขเบนเปˆเปƒเบ™เป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เบชเปˆเบงเบ™เบ—เบต 4: เบเบฑเบ‡เปƒเบŠเป‰ Linux เปƒเบ™ RocketChip RISC-Vเบชเปˆเบงเบ™เบ—เบต 4: เบเบฑเบ‡เปƒเบŠเป‰ Linux เปƒเบ™ RocketChip RISC-V

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, inscription เปƒเบ™เบŠเบดเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ: K4T1G164QQ-HCF7. เป‚เบ”เบเบเบฒเบ™เบžเบดเบกเป€เบชเบฑเป‰เบ™เบ™เบตเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Google, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเป€เบญเบเบฐเบชเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบซเบฅเบฒเบเบชเบดเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบตเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ” IP Core. เบžเบฝเบ‡เปเบ•เปˆเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบซเบปเบงเบซเบ™เปˆเบงเบเบ‚เบญเบ‡เบเบฒเบ™เบงเบฑเบ”เปเบ—เบ: เบšเบฒเบ‡เบšเปˆเบญเบ™ ns, เบšเบฒเบ‡โ€‹เบšเปˆเบญเบ™ - ps, เปเบฅเบฐเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเปเปˆเบกเบตเบฎเบธเป‰เบ™ tCK. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เบชเบญเบ™โ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบญเบปเบฒโ€‹เปƒเบˆโ€‹เปƒเบชเปˆ - เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบซเบผเบฒเบโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เบชเบธเปˆเบก (เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบฎเบฑเบšโ€‹เบ›เบฐโ€‹เบเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ” "เป€เบœเบปเบฒโ€‹" เบ„เบงเบฒเบกโ€‹เบŠเบปเบ‡โ€‹เบˆเปเบฒโ€‹เบซเบผเบท FPGA เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰). เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบ”เบถเบ‡เบ”เบนเบ”เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰: เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบ”เบปเบ™เบ™เบฒเบ™, เปเบฅเบฐเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบเบงเป‰เบฒเบ‡เบ‚เบญเบ‡เบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰เบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบฅเบฐเบซเบฑเบ” Verilog เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. : เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™ MemIfBundle เบŠเบตเป‰เบšเบญเบ val mem_ba = IO(Output(UInt(2.W))), เปเบฅเบฐเบกเบต 8 เบ—เบฐเบ™เบฒเบ„เบฒเบ™ (i. e. เบ—เบตเปˆเบขเบนเปˆ 3 bits เบเบงเป‰เบฒเบ‡), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเปเบกเปˆเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบˆเบฒเบเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบซเป‰เบญเบเบขเบนเปˆเปƒเบ™เบญเบฒเบเบฒเบ” - เบšเบฑเบ™เบซเบฒ, เปเบ•เปˆเบšเปเปˆเบชเปเบฒเบ„เบฑเบ™, เบชเบฐเบ™เบฑเป‰เบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบชเบฑเบ‡เป€เบ„เบฒเบฐ, เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบ.

เบšเบฒเบ‡เบ—เบตเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป‚เบกเบ”เบนเบ™เป€เบเบปเปˆเบฒเบ–เป‰เบฒเบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบ‚เบตเป‰เบ„เป‰เบฒเบ™เป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเปเบกเบ‡เป„เบกเป‰เบ—เบตเปˆเบญเบฒเบ”เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰: เบ‚เป‰เบญเบเบกเบตเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบžเบฝเบ‡เบžเป.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ timebase-frequency เปƒเบ™ DTS เบˆเบฒเบเบฅเบฐเบ”เบฑเบš CPU เบชเบฐเป€เบžเบฒเบฐเป„เบ›เบซเบฒเบฅเบฐเบ”เบฑเบš node cpus (เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ‚เบญเบ‡ kernel), เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš:

เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰

[    0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[    0.000000] Linux version 4.19.0-sifive-1+ (trosinenko@trosinenko-pc) (gcc version 8.3.0 (Buildroot 2019.02-07449-g4eddd28f99)) #1 SMP Tue Jul 9 22:42:36 MSK 2019
[    0.000000] bootconsole [early0] enabled
[    0.000000] Initial ramdisk at: 0x(____ptrval____) (16777216 bytes)
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000]   Normal   [mem 0x00000000c0000000-0x00000bffffffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
[    0.000000] software IO TLB: mapped [mem 0xbb1fc000-0xbf1fc000] (64MB)
[    0.000000] elf_hwcap is 0x112d
[    0.000000] percpu: Embedded 17 pages/cpu @(____ptrval____) s29400 r8192 d32040 u69632
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 258055
[    0.000000] Kernel command line: debug console=ttySIF0,125200 root=/dev/mmcblk0p2 loglevel=7 rootwait
[    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
[    0.000000] Sorting __ex_table...
[    0.000000] Memory: 937696K/1046528K available (6565K kernel code, 343K rwdata, 2564K rodata, 208K init, 832K bss, 108832K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu:     RCU event tracing is enabled.
[    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
[    0.000000] plic: mapped 8 interrupts to 1 (out of 2) handlers.
[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1d854df40, max_idle_ns: 3526361616960 ns
[    0.000000] Console: colour dummy device 80x25
[    0.000000] Calibrating delay loop (skipped), value calculated using timer frequency.. 2.00 BogoMIPS (lpj=10000)
[    0.020000] pid_max: default: 32768 minimum: 301
[    0.030000] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
[    0.040000] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
[    0.140000] rcu: Hierarchical SRCU implementation.
[    0.190000] smp: Bringing up secondary CPUs ...
[    0.190000] smp: Brought up 1 node, 1 CPU
[    0.220000] devtmpfs: initialized
[    0.300000] random: get_random_u32 called from bucket_table_alloc+0x76/0x17a with crng_init=0
[    0.330000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.340000] futex hash table entries: 256 (order: 2, 16384 bytes)
[    0.380000] NET: Registered protocol family 16
[    1.850000] vgaarb: loaded
[    1.870000] SCSI subsystem initialized
[    1.900000] usbcore: registered new interface driver usbfs
[    1.910000] usbcore: registered new interface driver hub
[    1.920000] usbcore: registered new device driver usb
[    1.930000] pps_core: LinuxPPS API ver. 1 registered
[    1.940000] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[    1.950000] PTP clock support registered
[    1.970000] Advanced Linux Sound Architecture Driver Initialized.
[    2.010000] clocksource: Switched to clocksource riscv_clocksource
[    2.600000] NET: Registered protocol family 2
[    2.640000] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes)
[    2.650000] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[    2.670000] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)
[    2.700000] TCP: Hash tables configured (established 8192 bind 8192)
[    2.720000] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    2.730000] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    2.750000] NET: Registered protocol family 1
[    2.770000] Unpacking initramfs...
[   23.980000] Initramfs unpacking failed: junk in compressed archive
[   24.030000] workingset: timestamp_bits=62 max_order=18 bucket_order=0
[   25.020000] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
[   25.030000] io scheduler noop registered
[   25.040000] io scheduler deadline registered
[   25.050000] io scheduler cfq registered (default)
[   25.060000] io scheduler mq-deadline registered
[   25.060000] io scheduler kyber registered
[   25.120000] sifive_gpio 64002000.gpio: SiFive GPIO chip registered 6 GPIOs
[   25.150000] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[   28.870000] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[   28.940000] sifive-serial 64000000.serial: unable to find controller clock
[   28.950000] sifive-serial: probe of 64000000.serial failed with error -2
[   28.980000] [drm] radeon kernel modesetting enabled.
[   28.990000] [drm] amdgpu kernel modesetting enabled.
[   29.500000] loop: module loaded
[   29.610000] sifive_spi 64001000.spi: Unable to find bus clock
[   29.620000] sifive_spi: probe of 64001000.spi failed with error -2
[   29.640000] libphy: Fixed MDIO Bus: probed
[   29.680000] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[   29.690000] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[   29.700000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[   29.710000] ehci-pci: EHCI PCI platform driver
[   29.720000] ehci-platform: EHCI generic platform driver
[   29.750000] mousedev: PS/2 mouse device common for all mice
[   29.790000] usbcore: registered new interface driver usbhid
[   29.800000] usbhid: USB HID core driver
[   29.820000] usbcore: registered new interface driver snd-usb-audio
[   29.900000] NET: Registered protocol family 10
[   29.960000] Segment Routing with IPv6
[   29.960000] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[   30.020000] NET: Registered protocol family 17
[   30.020000] Key type dns_resolver registered
[   30.070000] bootconsole [early0] uses init memory and must be disabled even before the real one is ready
[   30.080000] bootconsole [early0] disabled

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ›เบฐเบเบปเบ”เบ‚เบถเป‰เบ™.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบžเบฐเบเบฒเบเบฒเบกเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบชเบฒเบกเบšเบฑเบ™เบซเบฒ:

[   23.980000] Initramfs unpacking failed: junk in compressed archive
...
[   28.940000] sifive-serial 64000000.serial: unable to find controller clock
...
[   29.610000] sifive_spi 64001000.spi: Unable to find bus clock

...เปเบฅเบฐเบเบฑเบ‡เบขเบธเบ”เบเบฒเบ™เบชเบปเปˆเบ‡เบญเบญเบเป„เบ›เบเบฑเบ‡ console.

เบกเบฑเบ™เบšเปเปˆเบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบŠเบฐเบ™เบฐเบชเบญเบ‡เบšเบฑเบ™เบซเบฒเบเบฑเบšเบ„เบงเบฒเบกเบ–เบตเปˆ: เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบˆเบธเบ” clocks เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™, เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เปƒเบซเป‰เบŠเบทเปˆเบ›เป‰เบฒเบเบŠเบทเปˆเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบชเปเบฒเบฅเบฑเบš node tlclk:

diff --git a/arch/riscv/dts/zeowaa-1gb.dts b/arch/riscv/dts/zeowaa-1gb.dts
index 4b2cebc..1347e76 100644
--- a/arch/riscv/dts/zeowaa-1gb.dts
+++ b/arch/riscv/dts/zeowaa-1gb.dts
@@ -96,6 +97,7 @@
L8: serial@64000000 {
compatible = "sifive,uart0";
interrupt-parent = <&L0>;
+                        clocks = <&tlclk>;
interrupts = <2>;
reg = <0x64000000 0x1000>;
reg-names = "control";
@@ -107,6 +109,7 @@
interrupt-parent = <&L0>;
interrupts = <1>;
reg = <0x64001000 0x1000>;
+                        clocks = <&tlclk>;
reg-names = "control";
L12: mmc@0 {
compatible = "mmc-spi-slot";
@@ -116,7 +119,7 @@
voltage-ranges = <3300 3300>;
};
};
-                L11: tlclk {
+                tlclk: tlclk {
#clock-cells = <0>;
clock-frequency = <25000000>;
clock-output-names = "tlclk";

เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบชเบฒเบ #define pr_debug printk เป„เบ›เบซเบฒเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ init/initramfs.c, เป€เบŠเบดเปˆเบ‡เบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™ initramfs, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบฅเบฐเบญเบฝเบ”เบเบงเปˆเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ:

[    2.760000] Unpacking initramfs...
[    2.770000] Detected gzip compressed data
[   23.940000] Detected (null) compressed data
[   23.970000] Initramfs unpacking failed: junk in compressed archive

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบšเบฒเบ‡เบ—เบตเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบšเปเปˆเปเบกเปˆเบ™ เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ initramfs, เปเบฅเบฐ ะฒะผะตัั‚ะต.

เบ•เบปเบเบฅเบปเบ‡, เบฅเบฒเบงเบžเบปเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เบžเบฝเบ‡เบžเป. console เป„เบ›เปƒเบช? เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเปƒเบซเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบšเบฑเบ™เบซเบฒเปƒเบ™ Github: linux เบฅเบปเป‰เบกเป€เบซเบฅเบงเปƒเบ™เบเบฒเบ™เบ™เปเบฒเบกเบฒเปƒเบชเปˆเบเบฐเบ”เบฒเบ™ vc707 โ€” เบกเบฑเบ™เบ›เบฐเบเบปเบ”เบงเปˆเบฒ UART เบขเปˆเบฒเบ‡เบ”เบฝเบง, เบญเบตเบ‡เบ•เบฒเบกเบœเบนเป‰เบ‚เบฑเบšเบ‚เบตเปˆ, เบšเปเปˆเบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบš. เปเบ•เปˆ เบเบฒเบ™เปเบเป‰เป„เบ‚ เบฅเบปเบ‡เบงเบฑเบ™เบ—เบต 11 เบเปเบฅเบฐเบเบปเบ” 2018 - เบ™เบถเปˆเบ‡เบ›เบตเบเปˆเบญเบ™. เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ™เบตเป‰เบšเปเปˆเป€เบ„เบตเบเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เบชเป‰เบฒเบ‡เปเบเปˆเบ™. เป‚เบ”เบเบเบฒเบ™เปƒเบŠเป‰เปเบžเบฑเบ”เบ™เบตเป‰เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฑเบš Linux เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเป‰เบง! เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบšเบฑเบ™เบซเบฒเบเบฑเบš initramfs เปเบกเปˆเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เปเบ—เป‰เป†.

เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเป€เบ›เบฑเบ™ user=root, password=sifive, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป‚เบ”เบเบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒเปƒเบ”เป† (เบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบ•เบปเบงเป€เบฅเบ GPIO เบกเบตเบžเบทเป‰เบ™เบ–เบฒเบ™, เป€เบŠเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบ„เบดเบ”เป„เบฅเปˆ, เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เบˆเบฒเบเป„เบŸเบฅเปŒ pseudo-file เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™) เบœเปˆเบฒเบ™ sysfs เป„เบŸ LED เบขเบนเปˆเป€เบ—เบดเบ‡เบเบฐเบ”เบฒเบ™.

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบ‚เป‰เบญเบเบ•เบดเบ”เบงเบดเบ”เบตเป‚เบญเบ‚เปเป‰เบ„เบงเบฒเบกเบ‚เบญเบ‡เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง Linux. เป€เบกเบทเปˆเบญ console เบ›เปˆเบฝเบ™เบˆเบฒเบ earlyprintk เป„เบ›เบซเบฒเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบซเบ™เบถเปˆเบ‡, เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบˆเบฐเบ›เบฒเบเบปเบ”, เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ„เบงเบฒเบกเป„เบง UART เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ, เบœเบนเป‰เบ™เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบœเปˆเบฒเบ™ "เบฅเบฑเบ‡เบเบดเบ™เบญเบฒเบซเบฒเบ™" เบ™เบตเป‰.

เบชเปˆเบงเบ™เบ—เบต 4: เบเบฑเบ‡เปƒเบŠเป‰ Linux เปƒเบ™ RocketChip RISC-V

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com