Pildil ĂŒtleb Linuxi kernal teile tere GPIO kaudu.
Sel osal RISC-V RocketChipi portimise loost hiina Cyclone IV plaadile kĂ€ivitame lĂ”puks Linuxi, Ă”pime ise konfigureerima mĂ€lukontrolleri IP Core'i ja teeme mĂ”ned muudatused dts-seadistustes. See artikkel on jĂ€tk. , kuid erinevalt eelmisest, mis on juba oluliselt laienenud, on see ĂŒsna lĂŒhike.
⊠Kuna setup_smp kutsutakse vĂ€lja ainult siis, kui kernel on konfigureeritud SMP toe jaoks, saame proovida mitme tuuma vĂ€lja lĂŒlitada. Oleks ebameeldiv, kui peaksin ka mĂ€lumoodulis rakendama aatomaarset tuge (mul tundus, et CPU tegeleb sellega iseseisvalt), kuid ĂŒhesĂŒdamelise korral ei tohiks see meid hĂ€irida.
Ikka ei töötanud...
[ 0.000000] OF: fdt: Ignoreerimine mÀlu vahemikku 0x80000000 - 0x80200000
[ 0.000000] Linuxi versioon 4.19.0-sifive-1+ (trosinenko@trosinenko-pc) (gcc versioon 8.3.0 (Buildroot 2019.02-07449-g4eddd28f99)) #1 NeljapÀev 4. juuli 18:38:10 MSK 2019
[ 0.000000] bootconsole [early0] lubatud
[ 0.000000] Algne ramdisk asub: 0x(____ptrval____) (16777216 baiti)
[ 0.000000] Ala vahemikud:
[ 0.000000] DMA32 [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] Normaalne [mem 0x00000000c0000000-0x00000bffffffffff]
[ 0.000000] Liikuv ala algus iga sÔlme jaoks
[ 0.000000] Varajased mÀlu sÔlme vahemikud
[ 0.000000] sÔlm 0: [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] Initmem seadistamine sÔlm 0 [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] tarkvara IO TLB: kaardistatud [mem 0xbb1fc000-0xbf1fc000] (64MB)
[ 0.000000] "cpu" seadme puu sissekannet ei leitud
[ 0.000000] Koostatud 1 ala nimekirja, liikuvuse gruppimine on lubatud. Kokku lehekĂŒljed: 258055
[ 0.000000] Kernel kÀskluste rida: debug console=ttySIF0,125200 root=\/dev\/mmcblk0p2 loglevel=7 rootwait
[ 0.000000] Dentry vahemÀe hash tabeli sissekanded: 131072 (order: 8, 1048576 baiti)
[ 0.000000] Inode-vahemÀe hash tabeli sissekanded: 65536 (order: 7, 524288 baiti)
[ 0.000000] Sorteerimine __ex_table...
[ 0.000000] BUG: Vale lehekĂŒlje olek protsessis swapper pfn:80bf7
[ 0.000000] lehekĂŒlg:ffffffe03f029e08 count:0 mapcount:-65280 mapping:0000000000000000 index:0x1
[ 0.000000] lipud: 0x0()
[ 0.000000] toor: 0000000000000000 0000000000000100 0000000000000200 0000000000000000
[ 0.000000] toor: 0000000000000001 0000000000000000 00000000ffff00ff
[ 0.000000] lehekĂŒlg vĂ€ljastatakse, kuna: mitte null mapcount
[ 0.000000] Moodulid, mis on seotud:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Ei ole mustanud 4.19.0-sifive-1+ #1
[ 0.000000] Helista jÀlg:
[ 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] Luku debugimine on keelatud seoses kerneliga
[ 0.000000] BUG: Vale lehekĂŒlje olek protsessis swapper pfn:80bf9
[ 0.000000] lehekĂŒlg:ffffffe03f029e78 count:0 mapcount:-65280 mapping:0000000000000000 index:0x0
[ 0.000000] lipud: 0x0()
[ 0.000000] toor: 0000000000000000 ffffffe03f020080 ffffffe03f020080 0000000000000000
[ 0.000000] toor: 0000000000000000 0000000000000000 00000000ffff00ff
[ 0.000000] lehekĂŒlg vĂ€ljastatakse, kuna: mitte null mapcount
[ 0.000000] Moodulid, mis on seotud:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Taintinud: G B 4.19.0-sifive-1+ #1
[ 0.000000] Helista jÀlg:
[ 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: Vale lehekĂŒlje olek protsessis swapper pfn:80bfa
[ 0.000000] lehekĂŒlg:ffffffe03f029eb0 count:0 mapcount:-65280 mapping:0000000000000000 index:0x0
[ 0.000000] lipud: 0x0()
[ 0.000000] toor: 0000000000000000 ffffffe03f0200b8 ffffffe03f0200b8 0000000000000000
[ 0.000000] toor: 0000000000000000 0000000000000000 00000000ffff00ff
[ 0.000000] lehekĂŒlg vĂ€ljastatakse, kuna: mitte null mapcount
[ 0.000000] Moodulid, mis on seotud:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Tainted: G B 4.19.0-sifive-1+ #1
[ 0.000000] Helista jÀlg:
[ 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: Vale lehekĂŒlje olek protsessis swapper pfn:80bfb
[ 0.000000] lehekĂŒlg:ffffffe03f029ee8 count:0 mapcount:-65280 mapping:0000000000000000 index:0x0
[ 0.000000] lipud: 0x0()
[ 0.000000] toor: 0000000000000000 ffffffe03f0200f0 ffffffe03f0200f0 0000000000000000
[ 0.000000] toor: 0000000000000000 0000000000000000 00000000ffff00ff
[ 0.000000] lehekĂŒlg vĂ€ljastatakse, kuna: mitte null mapcount
[ 0.000000] Moodulid, mis on seotud:
[ 0.000000] CPU: 0 PID: 0 Comm: swapper Tainted: G B 4.19.0-sifive-1+ #1
[ 0.000000] Helista jÀlg:
[ 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: Vale lehekĂŒlje olek protsessis swapper pfn:80bfc
[ 0.000000] lehekĂŒlg:ffffffe03f029f20 count:0 mapcount:-65280 mapping:0000000000000000 index:0x0
[ 0.000000] lipud: 0x0()
[ 0.000000] toor: 0000000000000000 ffffffe03f020028 ffffffe03f020028 0000000000000000
[ 0.000000] toor: 0000000000000000 0000000000000000 00000000ffff00ff
...Huvitav on see, et pĂ€rast kogu silumise otsustasin vaadata, milline peaks olema âviidatudâ tuuma vĂ€ljund, ĂŒtles make qemu, ja nĂ€gin sarnast viga.
Kahjuks on jĂ€rgmine tase (Linuxi tuum) keerulisem: GDB, mis on ĂŒhendatud JTAG kaudu RocketChipiga, töötab ilmselt fĂŒĂŒsiliste aadresside kĂŒlge, olenemata sellest, kuidas MMU seadistatakse, ja tuum on antud hetkel juba seadistatud aadresside kaardistamiseks, seega ei saa lihtsalt öelda display/10i $pc ei toimi â nĂ€eme vaid palju unimp. Siiski, kui me oleme juba vĂ€lja selgitanud nihke (tundub, et 0x80200000 -> 0xffffffe000000000), siis saab petta:
1: x/10i $pc
=> 0xffffffe000002436 : unimp
0xffffffe000002438 : unimp
0xffffffe00000243a : unimp
0xffffffe00000243c : unimp
0xffffffe00000243e : unimp
0xffffffe000002440 : unimp
0xffffffe000002442 : unimp
0xffffffe000002444 : unimp
0xffffffe000002446 : unimp
0xffffffe000002448 : 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)Murdmiseks kasutatakse sarnast meetodit:
(gdb) p setup_smp
$1 = {} 0xffffffe000002436
(gdb) b *0x80202436
Breakpoint 1 at 0x80202436
(gdb) c
JĂ€tkamine.
Programm sai signaali SIGTRAP, jÀlgimise/peatamise lÔks.
setup_smp () aadressil /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 () aadressil /home/trosinenko/freedom-u-sdk/linux/arch/riscv/kernel/smpboot.c:58
#1 0xffffffe0000022a2 aadressil setup_arch () aadressil /home/trosinenko/freedom-u-sdk/linux/arch/riscv/kernel/setup.c:253
#2 0x0000000000000000 aadressil ?? ()
Tagasi kutsumine peatatud: raami ei salvestatud PCAga neid tuleb kĂ€sitsi eemaldada, et edasi minna â GDB jaoks on see tĂ€iesti arusaamatu lĂ”ks. Ah jaa, kui sa kogemata ĂŒtled s vĂ”i n asemel si, siis pĂŒĂŒab gdb sisestada varjatud murdumispunkti, mis mĂ”istagi ei kehtestu, aga GDB-le ka ei öelda. Kuid Ă€rge kiirustage plaadi taaskĂ€ivitamisega â minu tĂ€helepanekute kohaselt piisab ainult gdb-taaskĂ€ivitamisest (pange tĂ€hele, et vanad murdumispunktid ei pruugi kaduda).
Tegelikult tuleb tegeleda algse probleemiga: silumiste seadmine printk funktsiooni of_find_node_by_type, mida kasutab kĂ€ivitamise protsessori tuuma otsingukood, nĂ€itab, et see nĂ€eb mingit prĂŒgi seadmete tĂŒĂŒpide nimede asemel. NĂ€iteks vĂ”tab see kuskilt rea âSeriaalportâ, kuigi seda pole dtb-s selgelt olemas. seadme_tĂŒĂŒp. Otsides neid baite tuuma pildist, leidsin need, vaatasin nihkeid ja mĂ”istsin ilmset: tuuma suurus kĂ€ivitusparameetrites on ilmselgelt alahinnatud: sellele on eraldatud 8Mb, kuid see vĂ”tab rohkem kui kĂŒmme. Eraldasin 16Mb, kuid kummalised asjad ei lĂ”petanud. PĂ€rast tantsu FDT lugemisega erinevatelt aadressidelt (tavaliselt edastatakse aadress tuumale registris a1), otsustasin lĂ”puks jĂ€lgida, mis seal praegu parsil on. Ănneks, selle asemel, et ekselda siluri (ja me mĂ€letame, et aadresside tĂ”lkimisega on veel nĂŒansse, mida tuleb kuidagi lahendada), saab lihtsalt ja ajutiselt failis drivers/of/fdt.c mĂŒĂŒda #define pr_debug printk. LĂ”puks Ă”nnestus:
debug'i vÀljundi lisamine
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 = %lx\n", 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 - piirata piirkondade arvu /memory sÔlmes
* @limit: maksimaalne kirje
@@ -1253,6 +1255,7 @@ bool __init early_init_dt_scan(void *params)
*/
void __init unflatten_device_tree(void)
{
+ printk("INITIAL: %lx\n", initial_boot_params);
__unflatten_device_tree(initial_boot_params, NULL, &of_root,
early_init_dt_alloc_memory_arch, false);VĂ€ljund riistvaral
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 = ;
#size-cells = ;
compatible = "freechips,rocketchip-unknown-dev";
model = "freechips,rocketchip-unknown";
chosen {
linux,initrd-start = ;
riscv,kernel-end = ;
riscv,kernel-start = ;
#address-cells = ;
#size-cells = ;
bootargs = ;
}
firmware {
sifive,uboot = "YYYY-MM-DD";
}
aliases {
serial0 = ;
}
cpus {
#address-cells = ;
#size-cells = ;
cpu@0 {
device_type = "cpu";
clock-frequency = ;
compatible = "sifive,rocket0", "riscv";
d-cache-block-size = ;
d-cache-sets = ;
d-cache-size = ;
d-tlb-sets = ;
d-tlb-size = ;
i-cache-block-size = ;
i-cache-sets = ;
i-cache-size = ;
i-tlb-sets = ;
i-tlb-size = ;
mmu-type = "riscv,sv39";
next-level-cache = ;
reg = ;
riscv,isa = "rv64imafdc";
status = "okay";
timebase-frequency = ;
tlb-split;
interrupt-controller {
#interrupt-cells = ;
compatible = "riscv,cpu-intc";
interrupt-controller;
phandle = ;
}
}
}
ram@80000000 {
device_type = "memory";
reg = ;
reg-names = "mem";
phandle = ;
}
soc {
#address-cells = ;
#size-cells = ;
compatible = "freechips,rocketchip-unknown-soc", "simple-bus";
ranges;
clint@2000000 {
compatible = "riscv,clint0";
interrupts-extended = ;
reg = ;
reg-names = "control";
}
debug-controller@0 {
compatible = "sifive,debug-013", "riscv,debug-013";
interrupts-extended = ;
reg = ;
reg-names = "control";
}
gpio@64002000 {
#gpio-cells = ;
#interrupt-cells = ;
compatible = "sifive,gpio0";
gpio-controller;
interrupt-controller;
interrupt-parent = ;
interrupts = ;
reg = ;
reg-names = "control";
}
interrupt-controller@c000000 {
#interrupt-cells = ;
compatible = "riscv,plic0";
interrupt-controller;
interrupts-extended = ;
reg = ;
reg-names = "control";
riscv,max-priority = ;
riscv,ndev = ;
phandle = ;
}
rom@10000 {
compatible = "sifive,maskrom0";
reg = ;
reg-names = "mem";
}
serial@64000000 {
compatible = "sifive,uart0";
interrupt-parent = ;
interrupts = ;
reg = ;
reg-names = "control";
}
spi@64001000 {
#address-cells = ;
#size-cells = ;
compatible = "sifive,spi0";
interrupt-parent = ;
interrupts = ;
reg = ;
reg-names = "control";
mmc@0 {
compatible = "mmc-spi-slot";
disable-wp;
reg = ;
spi-max-frequency = ;
voltage-ranges = ;
}
}
tlclk {
#clock-cells = ;
clock-frequency = ;
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]VĂ€lj QEMU-s
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 = ;
#size-cells = ;
compatible = "riscv-virtio";
model = "riscv-virtio,qemu";
chosen {
linux,initrd-start = ;
linux,initrd-end = ;
riscv,kernel-start = ;
riscv,kernel-end = ;
bootargs = "";
stdout-path = ;
}
uart@10000000 {
interrupts = ;
interrupt-parent = ;
clock-frequency = ;
reg = ;
compatible = "ns16550a";
}
test@100000 {
reg = ;
compatible = "sifive,test0";
}
virtio_mmio@10008000 {
interrupts = ;
interrupt-parent = ;
reg = ;
compatible = "virtio,mmio";
}
virtio_mmio@10007000 {
interrupts = ;
interrupt-parent = ;
reg = ;
compatible = "virtio,mmio";
}
virtio_mmio@10006000 {
interrupts = ;
interrupt-parent = ;
reg = ;
compatible = "virtio,mmio";
}
virtio_mmio@10005000 {
interrupts = ;
interrupt-parent = ;
reg = ;
compatible = "virtio,mmio";
}
virtio_mmio@10004000 {
interrupts = ;
interrupt-parent = ;
reg = ;
compatible = "virtio,mmio";
}
virtio_mmio@10003000 {
interrupts = ;
interrupt-parent = ;
reg = ;
compatible = "virtio,mmio";
}
virtio_mmio@10002000 {
interrupts = ;
interrupt-parent = ;
reg = ;
compatible = "virtio,mmio";
}
virtio_mmio@10001000 {
interrupts = ;
interrupt-parent = ;
reg = ;
compatible = "virtio,mmio";
}
cpus {
#address-cells = ;
#size-cells = ;
timebase-frequency = ;
cpu@0 {
device_type = "cpu";
reg = ;
status = "okay";
compatible = "riscv";
riscv,isa = "rv64imafdcsu";
mmu-type = "riscv,sv48";
clock-frequency = ;
interrupt-controller {
#interrupt-cells = ;
interrupt-controller;
compatible = "riscv,cpu-intc";
linux,phandle = ;
phandle = ;
}
}
}
memory@80000000 {
device_type = "memory";
reg = ;
}
soc {
#address-cells = ;
#size-cells = ;
compatible = "simple-bus";
ranges;
pci@30000000 {
interrupt-map-mask = ;
interrupt-map = ;
ranges = ;
reg = ;
dma-coherent;
bus-range = ;
linux,pci-domain = ;
device_type = "pci";
compatible = "pci-host-ecam-generic";
#size-cells = ;
#interrupt-cells = ;
#address-cells = ;
}
interrupt-controller@c000000 {
linux,phandle = ;
phandle = ;
riscv,ndev = ;
riscv,max-priority = ;
reg-names = "control";
reg = ;
interrupts-extended = ;
interrupt-controller;
compatible = "riscv,plic0";
#interrupt-cells = ;
#address-cells = ;
}
clint@2000000 {
interrupts-extended = ;
reg = ;
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] 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 <giometti@linux.it>
[ 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(«Timestamped» lines are output by the kernel, before which the tree outputs BBL) On one side, FDT is successfully read, but on the other side, it turns out to be some nonsense in the parsed 'object' tree.
During the debugging process, I realized that BBL could not read the 'double' address not because there was an error in the config, but simply because the root node was set. #address-cells = <1>; #size-cells = <1>;.
By expanding the debug output, I saw that the pointers had 'collided' in a rather strange way: their first (starting from zero) byte had zeroed out, something like type ja nimi 0xabcdef -> 0xab00ef . I had to use a familiar tactic: knowing the addresses where the corrupted memory was located, to write in the functionto print this data. And also scatter the function calls where they are few. Unfortunately, it didn't become much clearer. Then I started, cross-referencing with the disassembled printk objdump printk version, to manually set breakpoints and step through the problematic area of the code. And then a mysterious and unpleasant discovery was made: if I immediately set a breakpoint somewhere relatively far from a known-good state, then, stopping there, I would see already corrupted memory. But if I try to sneak up on it step by step, the error manages to hide! It smells of a corrupted memory controller and a cache hiding the error if the required value is constantly requested. What if... objdump Replacing the memory
Clinging to the possibility of solving the problem not on my side, I assumed that maybe I just got a faulty memory stick. Then I remembered that a decade-old netbook is not only a portable computer but also a valuable source of DDR2 SO-DIMM. As a bonus, you can insert memory removed from the board into it and get almost instant freezing of Memtest (Linux, by the way, booted almost to the graphical interface during that time.
But itâs better not to repeat such an experiment if you care about the information on the mounted disks⊠). On one hand, one might assume that the memory simply did not fit specifically for this netbook. On the other hand, it did manage to boot! There was hope that the memory is simply 'faulty', and the problem is not in my wrapper..
Seega, tuleb proovida ajutiselt kĂ€ivituda netbooki mĂ€luga. Kahjuks ei oska Quartus 18 seda IP Core'i uuendada nii, et seda saaks redigeerida. Tundub, et on lĂ”puks aeg Ă”ppida, kuidas luua uusi instantsse. KĂ”ik osutus ĂŒsna lihtsaks: otsime IP kataloogist punkti DDR2 SDRAM Controller with ALTMEMPHY Intel FPGA IP ja saame ploki sama liidesega nagu varem. Ainukeseks probleemiks on Ă”ige mĂ€luseade seadistamine.
Saame mÀluploki parameetrid
On suhteliselt ilmne viis mooduli seadistamiseks: lugeda parameetrid SPD-st. TÔepoolest, kui tavaline arvuti loeb SPD andmeid ja seob need kontrolleriga, siis laseme meil lugeda need andmed olemasolevast netbookist ja sisestada need tabelisse.
Ubuntu-s tehakse seda : tuleb paigaldada pakett i2c-tools, laadida moodulid eeprom ja i2c-i801 (ma ei ole kindel, kas teine draiver sobib igal pool), seejÀrel kÀivitada decode-dimms:
decode-dimms vÀljund
# 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: 3Probleem on selles, et mÔningaid tempot siin ei ole nÀidatud, seega lÀheme teisele teele.
Mida meil mÀluplokkidel kirjas on:


KĂ€esoleval juhul on huvitavam mĂ€rkestus mĂ€lu kiipidel: K4T1G164QQ-HCF7. Kui sisestada see rida Googlesse, saame datasheet'i mitme kĂŒmne lehekĂŒljega, kus on kĂ”ik vajalikud parameetrid, mida saab hoolikalt IP Core'i omadustesse sisestada. Kuid olge ettevaatlik mÔÔtĂŒhikute osas: mĂ”nes kohas ns, mĂ”nes kohas â ps, ja mĂ”nikord ka osad tCK. Ma ei hakka teid Ă”petama, millele tĂ€helepanu pöörata â ma seadsin ise palju asju katse-eksituse meetodil (ma ei saa siiski garanteerida, et ei saa 'mĂ€lu vĂ”i FPGA-d Ă€ra kĂ”rvetada'). TĂ”mban vaid tĂ€helepanu sellele: ma ei suutnud pikka aega kontrollereid tööle saada, ja viimane samm oli arusaamine, et pean kontrollima kĂ”igi mĂ€lu liideste laius vastavalt genereeritud Verilog koodile: sest kui MemIfBundle on mĂ€rgitud val mem_ba = IO(Output(UInt(2.W))), ja pankade arv on 8 (st aadressi laius 3 bitti), siis kĂ”ik, mis meil on â mĂ€lu kontrollerist Ă”hku rippuv vĂ€ljund â on probleem, kuid mitte kriitiline, seega kĂ”ik sĂŒnteesitakse, kuid ei toimi.
VÔib-olla kÔik töösse lÀheks ka vana mooduliga, kui kontrolleri uuendaks, aga praegu on mul liiga laisk potentsiaalsete ujuvate vigadega tegelemiseks: mul on enda omi piisavalt.
Seega, pÀrast liikumist timebase-frequency DTS-is konkreetse CPU tasemelt sÔlme tasemele cpus (selgelt vÀljendatud tuuma palvega) saame:
Peidetud tekst
[ 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
[ 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] disabledPÀrast seda ei toimu midagi nÀhtavat.
NĂŒĂŒd saab proovida kolme probleemi lahendada:
[ 23.980000] Initramfs'i lahkamine ebaĂ”nnestus: arhiivist leiti prĂŒgi
...
[ 28.940000] sifive-serial 64000000.serial: ei suuda leida kontrolleri kella
...
[ 29.610000] sifive_spi 64001000.spi: ei suuda leida bussi kella⊠samuti lÔpetamisega konsoolis.
Kahte sageduste probleemi on ĂŒsna lihtne lahendada: tuleb lisada kirjed clocks vajalikesse seadmete alampuudesse, andes sĂ”lmele arusaadava sildi nime 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 = <>;
reg = <<0x64000000 0x1000>;
reg-names = "control";
@@ -107,6 +109,7 @@
interrupt-parent = <&L0>;
interrupts = <>;
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 = <>;
clock-frequency = <>;
clock-output-names = "tlclk";Lisadesin rea #define pr_debug printk faili alguses init/initramfs.c, millega saadame algselt sĂ”numi prĂŒgist selle asemel, et initramfs saame veidi ĂŒksikasjalikuma sĂ”numi:
[ 2.760000] Initramfs'i lahkamine...
[ 2.770000] Tuvastatud gzip-i kompressitud andmed
[ 23.940000] Tuvastatud (null) kompressitud andmed
[ 23.970000] Initramfs'i lahkamine ebaĂ”nnestus: arhiivist leiti prĂŒgiTĂ€hendab, vĂ”ib-olla ei ole prĂŒgi asemel initramfs, vaid koos.
Okei, midagi leiti, vĂ”ib-olla on sellest piisavalt. Aga kuhu konsool kadus? Otsing annab viite GitHubi repliigile: â selgub, et ĂŒks UART ei tasu draiveri arvates isegi juttu. Kuid on datifitseeritud 11. juulil 2018 â aasta tagasi. Selgus, et see kommiteerimine ei jĂ”udnud puusse, millest minu kernel koostati. Rakendades selle plaastri kĂ€sitsi, sain töötava Linuxi! Selgus, et initramfs'i probleem polnud tĂ”eliselt kriitiline.
Sisselogimisega user=root, password=sifive, sain ilma eriliste probleemideta (v.a. et mÔista, et GPIO numbril on baas, millest kÔik arvestatakse, ja mille peab lihtsalt vastavast pseudo-failist lugema) lÀbi sysfs syttida LEDi plaadil.
Nagu eelmisel korral, lisatan Linuxi kĂ€ivitusvideo teksti. Konsooli ĂŒleminekul earlyprintk-lt tavapĂ€rasele ilmub mingisugune mĂŒra, mis sarnaneb valesti seadistatud UART-i vĂ€ljundiga. Mis huvitav, mĂ€ngija suutis selle "pudru" edukalt lĂ€bi töötada.
Allikas: habr.com
