1 | =====================================================================
|
---|
2 | RPI-ARM64ã¿ã¼ã²ããä¾åé¨ (ssp-1.3.0対å¿ï¼
|
---|
3 | Last Modified: '19/04/16
|
---|
4 | =====================================================================
|
---|
5 |
|
---|
6 | (1) æ¦è¦
|
---|
7 |
|
---|
8 | RPI-ARM64ã¿ã¼ã²ããä¾åé¨ã¯ï¼ããã»ããµã«BCM2837(Cortex-A53ã³ã¢)ãæè¼ãã
|
---|
9 | Raspberry Pi3B ãã¼ãããµãã¼ããã¦ããï¼
|
---|
10 |
|
---|
11 |
|
---|
12 | (2) ã«ã¼ãã«ã®ä½¿ç¨ãªã½ã¼ã¹
|
---|
13 |
|
---|
14 | ã»RAM
|
---|
15 | ã³ã¼ãããã³ãã¼ã¿ãé
|
---|
16 | ç½®ããï¼
|
---|
17 | 使ç¨éã¯ãªãã¸ã§ã¯ãæ°ã«ä¾åããï¼
|
---|
18 | ã»Generic Timer
|
---|
19 | ã«ã¼ãã«å
|
---|
20 | é¨ã®ãã£ãã¯ã®çæã«ç¨ããï¼
|
---|
21 | ã»UART0 (PL011)
|
---|
22 | ã³ã³ã½ã¼ã«ã®åºåã«ä½¿ç¨
|
---|
23 |
|
---|
24 |
|
---|
25 | (3) éçºç°å¢
|
---|
26 |
|
---|
27 | å®è¡ãã¡ã¤ã«ã®æ§ç¯ã«ã¯GCCéçºç°å¢ãç¨ãã(åä½ç¢ºèªãã¼ã¸ã§ã³: 7.2.1)
|
---|
28 | GCC ã¯ä»¥ä¸ã®ãµã¤ããããã¤ããªããã±ã¼ã¸ããã¦ã³ãã¼ããããã¨ãã§ããï¼
|
---|
29 | https://releases.linaro.org/components/toolchain/binaries/
|
---|
30 |
|
---|
31 |
|
---|
32 | (4) ãããã°ç°å¢
|
---|
33 |
|
---|
34 | ãããã°ç°å¢ã¨ãã¦ï¼QEMUã®GDBãµã¼ãæ©è½ãå©ç¨ãã¦ï¼GDBã«ãããããã°ãå¯è½.
|
---|
35 | ãã ãRaspberry Pi3 ã®ã¨ãã¥ã¬ã¼ã·ã§ã³ããµãã¼ãããqemuã¯2.12以éã使ç¨ããå¿
|
---|
36 | è¦ãããï¼
|
---|
37 |
|
---|
38 |
|
---|
39 | (5) å®è¡ç°å¢
|
---|
40 |
|
---|
41 | å®è¡ãã¡ã¤ã«ãå«ãï¼èµ·åã«å¿
|
---|
42 | è¦ãªä»¥ä¸ã®ãã¡ã¤ã«ãFAT32ãã©ã¼ãããããã
|
---|
43 | ãã¤ã¯ãSDã«ã¼ãã®ã«ã¼ãç´ä¸ã«ã³ãã¼ãï¼Raspberry Pi ã§èµ·åããï¼
|
---|
44 |
|
---|
45 | (5-1) bootcode.bin, start.elf
|
---|
46 | 以ä¸ãã¼ã¸ãã bootcode.binã¨start.elfããã¦ã³ãã¼ãããï¼
|
---|
47 | https://github.com/raspberrypi/firmware/tree/master/boot
|
---|
48 | (ä¸è¨ã¯masterãã©ã³ãä»å±ã®ãã¡ã¤ã«ã§ãããï¼å¥ãã©ã³ãã®ååãã¡ã¤ã«ãé¸æãã¦ããã)
|
---|
49 |
|
---|
50 | (5-2) å®è¡ãã¡ã¤ã«
|
---|
51 | å®è¡ãã¡ã¤ã«ã®ãã¤ããªã¤ã¡ã¼ã¸ã使ç¨ããï¼
|
---|
52 | ãã¤ããªã¤ã¡ã¼ã¸ã¯ãmake ssp.binããå®è¡ããã¨çæãããï¼
|
---|
53 | ãã¡ã¤ã«åã kernel.img ã¾ã㯠kernel8.img ã«ãã¦ããã¨èªåçã«èªã¿è¾¼ã¾ããï¼
|
---|
54 |
|
---|
55 | (5-3) config.txt
|
---|
56 | èµ·åè¨å®ãæå®ããããã®ããã¹ããã¡ã¤ã«ï¼
|
---|
57 | ãããããï¼ä»¥ä¸ã®3è¡ãå«ãããã¹ããã¡ã¤ã«ãä½æããã°è¯ã
|
---|
58 | arm_control=0x200
|
---|
59 | kernel_old=1
|
---|
60 | disable_commandline_tags=1
|
---|
61 | ããã«å ãï¼å®è¡ãã¡ã¤ã«åã kernel.img, kernel8.img 以å¤ã§ã³ãã¼ããå ´åã¯
|
---|
62 | ãã¡ã¤ã«ãæå®ããããã®è¡ã追å ãã¦ããï¼
|
---|
63 | kernel=ssp.bin
|
---|
64 |
|
---|
65 | ãã®ä»ï¼config.txt ã®å
|
---|
66 | 容ã«ã¤ãã¦è©³ããã¯ä»¥ä¸ãåç
|
---|
67 | §ã®ãã¨ï¼
|
---|
68 | https://www.raspberrypi.org/documentation/configuration/config-txt/
|
---|
69 |
|
---|
70 | (6) QEMUãç¨ããåä½ç¢ºèª
|
---|
71 |
|
---|
72 | (6-1) QEMUãç¨ããå®è¡ç¢ºèª
|
---|
73 |
|
---|
74 | QEMUãç¨ãã¦å®è¡ãã¡ã¤ã«ãåããå ´åï¼ä»¥ä¸ã®ããã«ã³ãã³ããå®è¡ããï¼
|
---|
75 | ããã§å®è¡ãã¡ã¤ã«åã ssp ã¨ãã
|
---|
76 |
|
---|
77 | (å®è¡ä¾)
|
---|
78 | $ qemu-system-aarch64 -M raspi3 -display none -serial stdio -kernel ssp
|
---|
79 |
|
---|
80 | TOPPERS/SSP Kernel 1.3.0 for RPi ARM64 (May 29 2018 , 15:51:44)
|
---|
81 | Copyright (C) 2010 by Meika Sugimoto
|
---|
82 | Copyright (C) 2010 by Naoki Saito
|
---|
83 | Nagoya Municipal Industrial Research Institute, JAPAN
|
---|
84 |
|
---|
85 | System logging task is started on port 1.
|
---|
86 | Sample program starts.
|
---|
87 |
|
---|
88 | (ããã§ï¼ã1ããaãã¨ã¿ã¤ããã)
|
---|
89 |
|
---|
90 | #act_tsk(1)
|
---|
91 | task1 is running (001). |
|
---|
92 | task1 is running (002). |
|
---|
93 | (以ä¸ç¥)
|
---|
94 |
|
---|
95 |
|
---|
96 | (6-2) GDBã«ãããããã°æé
|
---|
97 |
|
---|
98 | GDBãç¨ãããããã°ãè¡ãå ´åï¼ã·ã§ã«ã2ã¤ç¨æããï¼
|
---|
99 | ä¸ã¤ã¯qemuãèµ·åãGDBãµã¼ãã¨ãã¦èµ·åããï¼
|
---|
100 |
|
---|
101 | (1ã¤ç®ã®ã·ã§ã«)
|
---|
102 | $ qemu-system-aarch64 -M raspi3 -display none -serial stdio -s -S
|
---|
103 |
|
---|
104 | ãã㧠localhost:1234 ã§GDBãµã¼ããæ¥ç¶ãå¾
|
---|
105 | ã¡åããç¶æ
|
---|
106 | ã«ãªãï¼
|
---|
107 |
|
---|
108 | ããä¸ã¤ã®ã·ã§ã«ã§GDBãèµ·åãï¼GDBãµã¼ãã«æ¥ç¶ããï¼
|
---|
109 |
|
---|
110 | (2ã¤ç®ã®ã·ã§ã«)
|
---|
111 | $ aarch-elf-gdb ssp
|
---|
112 | (gdb)
|
---|
113 |
|
---|
114 | ããã§å種ã®è¨å®ï¼ãµã¼ãã¸ã®æ¥ç¶ï¼ãã¼ããè¡ãã¨ã¹ããããå®è¡çã®
|
---|
115 | ãããã°åä½ãè¡ããã¨ãã§ããï¼
|
---|
116 |
|
---|
117 | (gdb) set architecture aarch64
|
---|
118 | The target architecture is assumed to be aarch64
|
---|
119 | (gdb) set debug aarch64
|
---|
120 | (gdb) target extended-remote localhost:1234
|
---|
121 | Remote debugging using localhost:1234
|
---|
122 | 0x0000000000000000 in ?? ()
|
---|
123 | (gdb) load
|
---|
124 | Loading section .note.gnu.build-id, size 0x24 lma 0x0
|
---|
125 | Loading section .text, size 0x5040 lma 0x40000000
|
---|
126 | Loading section .rodata, size 0x650 lma 0x40005040
|
---|
127 | Loading section .rodata.str1.8, size 0x5b8 lma 0x40005690
|
---|
128 | Loading section .data, size 0x8 lma 0x40005c48
|
---|
129 | Start address 0x40000000, load size 23668
|
---|
130 | Transfer rate: 11556 KB/sec, 1577 bytes/write.
|
---|
131 | (gdb) s
|
---|
132 | aarch64: prologue analysis gave up addr=0x0x40000000 opcode=0xd50343df
|
---|
133 | 58 ldr x0, =vectors
|
---|
134 | (gdb) c
|
---|
135 | Continuing.
|
---|
136 |
|
---|
137 | 'c' ã³ãã³ãã§å®è¡ãç¶ç¶ããã¨ï¼GDBãµã¼ãå´ã®ç»é¢ã«ã·ãªã¢ã«ã¡ãã»ã¼ã¸ã表示ãããï¼
|
---|
138 | ãã¼å
|
---|
139 | ¥åããµã¼ãå´ã®ã·ã§ã«ç»é¢ã§è¡ãï¼
|
---|
140 |
|
---|
141 | 'c' ã³ãã³ãã«ããç¶ç¶ä¸ã®å®è¡ãåæ¢ããå ´åã¯Ctrl-Cã§çµäºããï¼
|
---|
142 | gdb ãçµäºããå ´åã¯ããã³ããã§'q'ã³ãã³ããå®è¡ãã¦çµäºããï¼
|
---|
143 |
|
---|
144 |
|
---|
145 | (7) ã¿ã¼ã²ããä¾åé¨ã®å®è£
|
---|
146 |
|
---|
147 |
|
---|
148 | (7-1) ã¿ã¼ã²ããç¥ç§°
|
---|
149 |
|
---|
150 | ã·ã¹ãã ç¥ç§°åã³ã¿ã¼ã²ããç¥ç§°ã¯ä»¥ä¸ã®éãï¼
|
---|
151 |
|
---|
152 | ã·ã¹ãã ç¥ç§°: rpi_arm64
|
---|
153 | ã¿ã¼ã²ããç¥ç§°: rpi_arm64_gcc ã§ãã
|
---|
154 |
|
---|
155 |
|
---|
156 | (7-2) å²è¾¼ã¿åªå
|
---|
157 | 度ã®ç¯å²
|
---|
158 |
|
---|
159 | BCM2837ã®å²è¾¼ã¿ã³ã³ããã¼ã©ã¯åªå
|
---|
160 | 度å¶å¾¡ã®æ©è½ãæããªããã
|
---|
161 | ã½ããã¦ã§ã¢ã§æ¬ä¼¼çã«å®è£
|
---|
162 | ãã¦ããï¼ãã®ãã
|
---|
163 | å²è¾¼ã¿åªå
|
---|
164 | 度ã¯ç¬èªã«æå®å¯è½ã§ããï¼ãããä¾åé¨ã§ã¯æ¢å®å¤ã¨ã㦠-15 ã -1 ã«å®ç¾©ãã¦ããï¼
|
---|
165 |
|
---|
166 | å²è¾¼ã¿åªå
|
---|
167 | 度ã®æé«å¤(å¤ã¨ãã¦ã¯æå°å¤)ãã¿ã¼ã²ããä¾åé¨ã§ç¬èªã«å®ç¾©ããå ´åï¼
|
---|
168 | target_kernel.h ã« TMIN_INTPRI ããã¯ãå®ç¾©ããï¼
|
---|
169 |
|
---|
170 |
|
---|
171 | (7-3) ã¿ã¤ã ãã£ãã¯ã®å®ç¾©
|
---|
172 |
|
---|
173 | TIC_NUMEããã³TIC_DENOã®å¤ã¯æ¢å®å¤ã¨ãã¦ã³ã¢ä¾åé¨ã§å
|
---|
174 | ±ã«1ã«å®ç¾©ãã¦ããï¼
|
---|
175 | ã¿ã¼ã²ããä¾åé¨ã§ç¬èªã«å®ç¾©ããå ´å㯠target_kernel.h ã«ãã¯ãå®ç¾©ããï¼
|
---|
176 |
|
---|
177 | (7-4) ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§ã®åæåå
|
---|
178 | 容
|
---|
179 |
|
---|
180 | Raspberry Pi ã®å ´åï¼ä»¥ä¸ã®ç¶æ
|
---|
181 | ã§ã·ã¹ãã ãéå§ããï¼
|
---|
182 | ã»ä¾å¤ã¬ãã«ï¼EL3
|
---|
183 | ã»ä½¿ç¨ã¹ã¿ãã¯: SP_EL3 (EL3h)
|
---|
184 | ã»ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ã®Fãããåã³Iãããã¯1ï¼IRQ,FIQç¦æ¢ï¼
|
---|
185 |
|
---|
186 | ãã®ããã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§ã¯ï¼ä»¥ä¸ã®å¦çãè¡ãªã£ãå¾ï¼sta_ker ãå¼ã³åºãï¼
|
---|
187 | ã»EL3h(AArch64)ããEL1h(AArch64)ã¸ã®ç§»è¡
|
---|
188 | ã»ã¹ã¿ãã¯ãã¤ã³ã¿åã³ãã¬ã¼ã ãã¤ã³ã¿ã®åæå
|
---|
189 | ã»ãã¯ã¿ãã¼ãã«ã¢ãã¬ã¹ã®è¨å®
|
---|
190 | ã»bssã»ã¯ã·ã§ã³ã®ã¯ãªã¢
|
---|
191 |
|
---|
192 |
|
---|
193 | (7-5) ã³ã³ã½ã¼ã«åºå
|
---|
194 |
|
---|
195 | ã³ã³ã½ã¼ã«åºåã«ã¯ PrimeCell UART (PL011)ã使ç¨ããï¼
|
---|
196 | 以ä¸ã®éä¿¡ãã©ã¼ãããã使ç¨ããï¼
|
---|
197 | ã»115200bps, Data 8bit, Parity none, Stop 1bit, Flowå¶å¾¡ãªã
|
---|
198 |
|
---|
199 |
|
---|
200 | (8) åãã¡ã¤ã«ã§ã®è¨å®é
|
---|
201 | ç®(å¿
|
---|
202 | è¦ã«å¿ãã¦ï¼å®ç¾©ãç·¨éãã)
|
---|
203 |
|
---|
204 | (8-1) Makefile.target
|
---|
205 |
|
---|
206 | ã»GCC_TARGET
|
---|
207 | GCCã® target triplet ãå®ç¾©
|
---|
208 | ã»COPTS
|
---|
209 | Cã³ã³ãã¤ã©ã¸ã®ãªãã·ã§ã³
|
---|
210 | ã»CDEFS
|
---|
211 | 追å ã®ãã¯ãå®ç¾©
|
---|
212 | ã»INCLUDES
|
---|
213 | ã¤ã³ã¯ã«ã¼ãæå®
|
---|
214 | ã»LDFLAGS
|
---|
215 | ãªã³ã«ã¸ã®ãªãã·ã§ã³
|
---|
216 | ã»LIBS
|
---|
217 | ãªã³ã¯ããã©ã¤ãã©ãª
|
---|
218 |
|
---|
219 | ã»TEXT_START_ADDRESS
|
---|
220 | ããã¹ãã»ã¯ã·ã§ã³ã®éå§ã¢ãã¬ã¹
|
---|
221 |
|
---|
222 | (8-2) target_config.h
|
---|
223 |
|
---|
224 | ã»DEFAULT_ISTKSZ
|
---|
225 | ããã©ã«ãã®éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ãµã¤ãº
|
---|
226 |
|
---|
227 | (8-4) target_kernel.h
|
---|
228 |
|
---|
229 | ã»TMIN_INTPRI
|
---|
230 | å²è¾¼ã¿åªå
|
---|
231 | 度ã®æé«å¤(æå°å¤)
|
---|
232 | ã»TIC_NUME, TIC_DENO
|
---|
233 | ã¿ã¤ã ãã£ãã¯ã®å¨æã®ååï¼åæ¯
|
---|
234 |
|
---|
235 | (8-3) target_test.h
|
---|
236 |
|
---|
237 | ã»STACK_SIZE
|
---|
238 | ãµã³ãã«ããã°ã©ã ã®ã¿ã¹ã¯ã®ã¹ã¿ãã¯ãµã¤ãº
|
---|
239 | ã»ALL_STACKSIZE
|
---|
240 | å
|
---|
241 | ±æã¹ã¿ãã¯é åã®ãµã¤ãº
|
---|
242 |
|
---|
243 | (8-4) target_timer.h
|
---|
244 | ã»INTPRI_TIMER
|
---|
245 | ã¿ã¤ãã¼ã®å²è¾¼ã¿åªå
|
---|
246 | 度
|
---|
247 | ã»INTATR_TIMER
|
---|
248 | ã¿ã¤ãã¼ã®å²è¾¼ã¿å±æ§
|
---|
249 |
|
---|
250 | âå¤æ´å±¥æ´
|
---|
251 | ã»2019/04/16
|
---|
252 | ããæ°è¦ä½æ
|
---|