[384] | 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 ã«ãã¦ããã¨èªåçã«èªã¿è¾¼ã¾ããï¼
|
---|
[385] | 54 |
|
---|
[384] | 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 | ããæ°è¦ä½æ
|
---|