2 |
- |
1 |
raspberry pi
|
|
|
2 |
|
|
|
3 |
broadcom 2835 SoC (based on 2708)
|
|
|
4 |
arm1176jzf-s (v6 arch) 700MHz cpu, apparently dual-issue, with vfp2
|
|
|
5 |
videocore 4 gpu
|
|
|
6 |
|
|
|
7 |
l1 I & D VIPT caches
|
|
|
8 |
16K each: 4-way, 128 sets, 32-byte lines
|
|
|
9 |
l1 D is write-through, l1 I is write-back
|
|
|
10 |
unified l2 PIPT cache 128K: 4-way?, 1024? sets, 32-byte lines, mostly for gpu
|
|
|
11 |
(by default CPU doesn't see it)
|
|
|
12 |
|
|
|
13 |
we arrange that device register accesses are uncached and unbuffered
|
|
|
14 |
(strongly ordered, in armv6/v7 terminology).
|
|
|
15 |
|
|
|
16 |
256MB or 512MB of dram at physical address 0, shared with gpu
|
|
|
17 |
non-16550 uart for console
|
|
|
18 |
uart serial voltages are TTL (3.3v, not rs232 which is nominally 12v);
|
|
|
19 |
could use usb serial (ick).
|
|
|
20 |
there's no real ethernet controller, so we have to use usb ether,
|
|
|
21 |
and the usb controller is nastier than usual.
|
|
|
22 |
|
|
|
23 |
There's a serial port (115200b/s) on P1 connector pins (GND,TXD,RXD) =
|
|
|
24 |
(6,8,10). These are 3v TTL signals: use a level-shifter to convert to
|
|
|
25 |
RS232, or a USB-to-TTL-serial adapter. Add the line "console=0
|
|
|
26 |
b115200" to the /cfg/pxe file on the server, or the parameter
|
|
|
27 |
"console='0 b115200'" to cmdline.txt on the SD card.
|
|
|
28 |
|
|
|
29 |
9pi is a Plan 9 terminal, which can boot with local fossil root on the
|
|
|
30 |
sd card (/dev/sdM0), or with root from a Plan 9 file server via tcp.
|
|
|
31 |
|
|
|
32 |
9picpu is a Plan 9 cpu server, which could be used in a headless
|
|
|
33 |
configuration without screen, keyboard or mouse.
|
|
|
34 |
|
|
|
35 |
9pifat is a minimal configuration which boots a shell script boot.rc
|
|
|
36 |
with root in /plan9 on the dos partition, maybe useful for embedded
|
|
|
37 |
applications where a full Plan 9 system is not needed.
|
|
|
38 |
|
|
|
39 |
Network booting with u-boot:
|
|
|
40 |
start with a normal rpi u-boot sd (e.g. raspberry-pi-uboot-20120707).
|
|
|
41 |
update the start.elf with a version from a newer rpi distro (see below).
|
|
|
42 |
mk installall
|
|
|
43 |
add new system to ndb
|
|
|
44 |
see booting(8)
|
|
|
45 |
|
|
|
46 |
Booting from sd card:
|
|
|
47 |
- start with a normal rpi distro sd (e.g. 2012-08-16-wheezy-raspbian)
|
|
|
48 |
[NB: versions of start.elf earlier than this may not be compatible]
|
|
|
49 |
- copy 9pi to sd's root directory
|
|
|
50 |
- add or change "kernel=" line in config.txt to "kernel=9pi"
|
|
|
51 |
- plan9.ini is built from the "kernel arguments" in cmdline.txt - each
|
|
|
52 |
var=value entry becomes one plan9.ini line, so entries with spaces will
|
|
|
53 |
need single quotes.
|
|
|
54 |
|
|
|
55 |
|
|
|
56 |
physical mem map
|
|
|
57 |
|
|
|
58 |
hex addr size what
|
|
|
59 |
----
|
|
|
60 |
|
|
|
61 |
00000000 64 exception vectors
|
|
|
62 |
00000100 7936 boot ATAGs (inc. cmdline.txt)
|
|
|
63 |
00002000 4K Mach
|
|
|
64 |
00003000 1K L2 page table for exception vectors
|
|
|
65 |
00003400 1K videocore mailbox buffer
|
|
|
66 |
00003800 2K FIQ stack
|
|
|
67 |
00004000 16K L1 page table for kernel
|
|
|
68 |
00008000 - default kernel load address
|
|
|
69 |
01000000 16K u-boot env
|
|
|
70 |
20000000 16M peripherals
|
|
|
71 |
20003000 system timer(s)
|
|
|
72 |
20007000 dma
|
|
|
73 |
2000B000 arm control: intr, timers 0 & 1, semas, doorbells, mboxes
|
|
|
74 |
20100000 power, reset, watchdog
|
|
|
75 |
20200000 gpio
|
|
|
76 |
20201000 uart0
|
|
|
77 |
20202000 mmc
|
|
|
78 |
20215040 uart1 (mini uart)
|
|
|
79 |
20300000 eMMC
|
|
|
80 |
20600000 smi
|
|
|
81 |
20980000 otg usb
|
|
|
82 |
|
|
|
83 |
40000000 l2 cache only
|
|
|
84 |
7e00b000 arm control
|
|
|
85 |
7e2000c0 jtag
|
|
|
86 |
7e201000? pl011 usrt
|
|
|
87 |
7e215000 aux: uart1, spi[12]
|
|
|
88 |
|
|
|
89 |
80000000
|
|
|
90 |
|
|
|
91 |
c0000000 bypass caches
|
|
|
92 |
|
|
|
93 |
virtual mem map (from cpu address map & mmu mappings)
|
|
|
94 |
|
|
|
95 |
hex addr size what
|
|
|
96 |
----
|
|
|
97 |
|
|
|
98 |
7e000000 16M i/o registers
|
|
|
99 |
80000000 <=224M kzero, kernel ram (reserve some for GPU)
|
|
|
100 |
ffff0000 4K exception vectors
|
|
|
101 |
|
|
|
102 |
Linux params at *R2 (default 0x100) are a sequence of ATAGs
|
|
|
103 |
struct atag {
|
|
|
104 |
u32int size; /* size of ATAG in words, including header */
|
|
|
105 |
u32int tag; /* ATAG_CORE is first, ATAG_NONE is last */
|
|
|
106 |
u32int data[size-2];
|
|
|
107 |
};
|
|
|
108 |
00000000 ATAG_NONE
|
|
|
109 |
54410001 ATAG_CORE
|
|
|
110 |
54410002 ATAG_MEM
|
|
|
111 |
54410009 ATAG_CMDLINE
|
|
|
112 |
|
|
|
113 |
uart dmas 15, 14
|
|
|
114 |
|
|
|
115 |
intrs (96)
|
|
|
116 |
irq1
|
|
|
117 |
|
|
|
118 |
1 timer1
|
|
|
119 |
2 timer2
|
|
|
120 |
3 timer3
|
|
|
121 |
8 isp
|
|
|
122 |
9 usb
|
|
|
123 |
16 dma0
|
|
|
124 |
17 dma1
|
|
|
125 |
⋯
|
|
|
126 |
28 dma12
|
|
|
127 |
29 aux: uart1
|
|
|
128 |
30 arm
|
|
|
129 |
31 vpu dma
|
|
|
130 |
|
|
|
131 |
irq2
|
|
|
132 |
35 sdc
|
|
|
133 |
36 dsio
|
|
|
134 |
40 hdmi0
|
|
|
135 |
41 hdmi1
|
|
|
136 |
48 smi
|
|
|
137 |
56 sdio
|
|
|
138 |
57 uart1 aka "vc uart"
|
|
|
139 |
|
|
|
140 |
irq0
|
|
|
141 |
64 timer
|
|
|
142 |
65 mbox
|
|
|
143 |
66 doorbell0
|
|
|
144 |
67 doorbell1
|
|
|
145 |
75 usb
|
|
|
146 |
77 dma2
|
|
|
147 |
78 dma3
|
|
|
148 |
82 sdio
|
|
|
149 |
83 uart0
|