1 | =====================================================================
|
---|
2 | ARM64ããã»ããµä¾åé¨
|
---|
3 | Last Modified: '18/05/29
|
---|
4 | =====================================================================
|
---|
5 |
|
---|
6 |
|
---|
7 | (1) 対å¿ãã¦ããã¿ã¼ã²ããã·ã¹ãã ã®ç¨®é¡ã»æ§æ
|
---|
8 |
|
---|
9 | ARM64ä¾åé¨ã¯ï¼ARMv8-A ã¢ã¼ããã¯ãã£ãã¿ã¼ã²ããã¨ãã¦ããï¼ARMv8-A ã¯
|
---|
10 | 64ãããã¢ã¼ããã¯ãã£ã§ããå½ä»¤ã»ããã¬ãã«ã§ãARMã¨ã¯ç°ãªãããï¼
|
---|
11 | ARMä¾åé¨ã¨åãã¦ããï¼
|
---|
12 |
|
---|
13 | (2) 使ç¨ããéçºç°å¢ã¨åä½æ¤è¨¼ããæ¡ä»¶ï¼ãã¼ã¸ã§ã³ï¼ãªãã·ã§ã³çï¼
|
---|
14 |
|
---|
15 | ã«ã¼ãã«ã¯GCCãç¨ãã¦ã³ã³ãã¤ã«ããï¼åä½ç¢ºèªãããã¼ã¸ã§ã³ã¯åã¿ã¼ã²
|
---|
16 | ããä¾åé¨ã®ããã¥ã¡ã³ãã«è¨è¼ããï¼
|
---|
17 |
|
---|
18 | (3) ã¿ã¼ã²ããå®ç¾©äºé
|
---|
19 | ã®è¦å®
|
---|
20 |
|
---|
21 | (3-1) ãã¼ã¿åã«é¢ããè¦å®
|
---|
22 |
|
---|
23 | ãã¼ã¿å㯠arch/gcc/tool_stddef.h ã§å®ç¾©ããã¦ããå
|
---|
24 | 容ã§ï¼floatåã¨
|
---|
25 | doubleåã¯ï¼ããããIEEE754æºæ ã®å精度浮åå°æ°ç¹æ°ã¨å精度浮åå°æ°ç¹
|
---|
26 | æ°ã§ããï¼
|
---|
27 |
|
---|
28 | (3-2) å²è¾¼ã¿å¦çã«é¢ããè¦å®
|
---|
29 |
|
---|
30 | âå²è¾¼ã¿ãã³ãã©çªå·ã¨å²è¾¼ã¿çªå·ã®å²å½ã¦ï¼ä¸¡è
|
---|
31 | ã®å¯¾å¿
|
---|
32 |
|
---|
33 | IRQ ããã³ FIQ ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ã¨ããï¼
|
---|
34 | å²è¾¼ã¿ãã³ãã©çªå·ã¨å²è¾¼ã¿çªå·ã¯ï¼ä¾å¤çºçæã«GICC_IAR ã«ã»ãããããä¾å¤çª
|
---|
35 | å·ãç¨ããï¼Generic Timer ã¯27çªã§ï¼å²è¾¼ã¿ã¯0çªããã®çªå·ãå²ãä»ããã
|
---|
36 | ã¦ããï¼
|
---|
37 |
|
---|
38 | âå²è¾¼ã¿åªå
|
---|
39 | 度ã®æ®µéæ°ï¼TMIN_INTPRIã®å¤ï¼ï¼ãã®è¨å®æ¹æ³
|
---|
40 |
|
---|
41 | å²è¾¼ã¿åªå
|
---|
42 | 度ã®æ®µéæ°ã¯ï¼ã¿ã¼ã²ããä¾åé¨æ¯ã«ç°ãªãï¼
|
---|
43 | ã«ã¼ãã«ç®¡çå
|
---|
44 | ã®å²è¾¼ã¿ã®æé«åªå
|
---|
45 | 度ï¼TMIN_INTPRIï¼ã¯ã¿ã¼ã²ããä¾åé¨ã§è¨å®ããï¼
|
---|
46 |
|
---|
47 | åå²è¾¼ã¿ã®å²è¾¼ã¿åªå
|
---|
48 | 度ã¯ï¼CFG_INT 㧠TMIN_INTPRI 以ä¸ã®å¤ãæå®ããï¼
|
---|
49 |
|
---|
50 | âdis_intã¨ena_intã®ãµãã¼ãã®æç¡ï¼ãã®å¶éäºé
|
---|
51 |
|
---|
52 |
|
---|
53 | dis_intã¨ena_intããµãã¼ãããï¼å¶éäºé
|
---|
54 | ã¯ç¹ã«ãªãï¼
|
---|
55 |
|
---|
56 | âCFG_INTã®å¶éäºé
|
---|
57 | ã¨æ¡å¼µï¼ã¿ã¼ã²ããå®ç¾©ã§ä½¿ç¨ã§ããå²è¾¼ã¿å±æ§ï¼
|
---|
58 |
|
---|
59 | CFG_INTã®å¶éäºé
|
---|
60 | ã¯ãªãï¼ã¿ã¼ã²ããå®ç¾©ã§ä½¿ç¨å¯è½ãªå²è¾¼ã¿å±æ§ã¯ç¹ã«ãª
|
---|
61 | ãï¼
|
---|
62 |
|
---|
63 | âã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿
|
---|
64 |
|
---|
65 | ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¯ãµãã¼ãããªãï¼
|
---|
66 | IRQï¼FIQå
|
---|
67 | ±ã«ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ã¨ãã¦æ±ãï¼
|
---|
68 |
|
---|
69 |
|
---|
70 | (3-3) CPUä¾å¤å¦çã«é¢ããè¦å®
|
---|
71 |
|
---|
72 | âCPUä¾å¤ãã³ãã©çªå·
|
---|
73 |
|
---|
74 | ARMv8ã§ã¯ï¼ä¾å¤çºçæã®ä¾å¤ã¬ãã«(EL)ï¼ä½¿ç¨ã¹ã¿ãã¯ï¼å®è¡ç¶æ
|
---|
75 | (AArch32 or AArch64)ï¼
|
---|
76 | çºçããä¾å¤ã®ç¨®é¡ã«ããï¼ã¸ã£ã³ãå
|
---|
77 | ã¨ãªãä¾å¤ãã¯ã¿ä¸ã®ãªãã»ããã¢ãã¬ã¹ãç°ãªãï¼
|
---|
78 | CPUä¾å¤ãã³ãã©ã¯ãã®ã¸ã£ã³ãå
|
---|
79 | ã®ãªãã»ããã¢ãã¬ã¹ã§åºå¥ãããã¨ã«ãï¼
|
---|
80 | ããããç°ãªãCPUä¾å¤ãã³ãã©çªå·ãå²ãå½ã¦ãï¼
|
---|
81 |
|
---|
82 | ä¾å¤çºçæã®ç¶æ
|
---|
83 | ä¾å¤ã®ç¨®é¡ ä¾å¤çªå· ãä¾å¤ãã¯ã¿å
|
---|
84 | é ããã®ãªãã»ãã
|
---|
85 | AArch64, EL1t(EL1, SP_EL0) Synchronous 0 0x0000
|
---|
86 | AArch64, EL1t(EL1, SP_EL0) SError 1 0x0180
|
---|
87 | AArch64, EL1h(EL1, SP_EL1) Synchronous 2 0x0200
|
---|
88 | AArch64, EL1h(EL1, SP_EL1) SError 3 0x0380
|
---|
89 | AArch64, EL0 (EL0, SP_EL0) Synchronous 4 0x0400
|
---|
90 | AArch64, EL0 (EL0, SP_EL0) SError 5 0x0580
|
---|
91 | AArch32, EL0 (EL0, SP_EL0) Synchronous 6 0x0600
|
---|
92 | AArch32, EL0 (EL0, SP_EL0) SError 7 0x0780
|
---|
93 |
|
---|
94 | (3-4) CPUããã¯ã»å²è¾¼ã¿ããã¯
|
---|
95 |
|
---|
96 | CPUããã¯ã¯ï¼PSTATE.I ããã³ PSTATE.F ãå
|
---|
97 | ±ã« 1 ã«ãããã¨ã§å®ç¾ããï¼
|
---|
98 | ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ããµãã¼ãããªãããï¼å
|
---|
99 | ¨å²è¾¼ã¿ããã¯ãã©ã°ã
|
---|
100 | CPUããã¯ã¨åæ§ã®å®è£
|
---|
101 | ã§ããï¼ãã ã CPUããã¯ãã©ã°ã¨ã¯ç¬ç«ãããã©ã°
|
---|
102 | ã¨ãã¦å
|
---|
103 | ¨å²è¾¼ã¿ããã¯ãã©ã°ããµãã¼ãããï¼å
|
---|
104 | ·ä½çã«ã¯SIL_LOC_INTå¼ã³åºã
|
---|
105 | æã«Iããã³Fãã©ã°ã®ç¶æ
|
---|
106 | ãè¨æ¶ãã¦ããï¼SIL_UNL_INT ã§å
|
---|
107 | ã®ç¶æ
|
---|
108 | ã«
|
---|
109 | æ»ãã¦ããï¼
|
---|
110 |
|
---|
111 | (3-5) æ§è½è©ä¾¡ç¨ã·ã¹ãã æå»ã®åç
|
---|
112 | §ã«é¢ããè¦å®
|
---|
113 |
|
---|
114 | get_utmããµãã¼ãããªãï¼
|
---|
115 |
|
---|
116 |
|
---|
117 | (3-6) ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§ã®åæåå
|
---|
118 | 容
|
---|
119 |
|
---|
120 | ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ãåæã¨ããããã»ããµã®ç¶æ
|
---|
121 | ã¯ããã»ããµã«ããç°ãªãããï¼
|
---|
122 | ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã¯ã¿ã¼ã²ããä¾åé¨ã«é
|
---|
123 | ç½®ãã¦ããï¼
|
---|
124 |
|
---|
125 | ä¾ã¨ãã¦QEMU VIRT ãã¼ãã®å ´åã¯ä»¥ä¸ã®ããã«ãªã£ã¦ããï¼
|
---|
126 | ã»ä¾å¤ã¬ãã«ã¯æ¢å®ã§EL1
|
---|
127 | ã»ä½¿ç¨ã¹ã¿ãã¯ã¯(EL1ã®å ´åï¼) SP_EL1
|
---|
128 | ã»èµ·åç´å¾ã¯PSTATEã®Fããã³Iã¯1ï¼IRQ,FIQç¦æ¢ï¼
|
---|
129 |
|
---|
130 | ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§ã¯ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæåï¼ãã¯ã¿ãã¼ãã«ã¢ãã¬ã¹ã®è¨å®ï¼
|
---|
131 | ã¡ã¢ãªã®åæåãªã©ã®å¿
|
---|
132 | è¦ãªå¦çãè¡ãï¼sta_ker ãå¼ã³åºãï¼
|
---|
133 |
|
---|
134 |
|
---|
135 | (4) ã¿ã¤ããã©ã¤ãé¢é£ã®æ
|
---|
136 | å ±
|
---|
137 |
|
---|
138 | ã«ã¼ãã«ã®ã¿ã¤ã ãã£ãã¯ã¨ãã¦ï¼Generic Timer ã使ç¨ããï¼
|
---|
139 | ãã£ãã¯å¨æã¯1msecã¨ããï¼
|
---|
140 |
|
---|
141 |
|
---|
142 | (5) ã¿ã¼ã²ããä¾åé¨ã§ã®è¨å®é
|
---|
143 | ç®
|
---|
144 |
|
---|
145 | ã¿ã¼ã²ããä¾åé¨ã§ã¯ä»¥ä¸ã®ãã¯ããå®ç¾©ããå¿
|
---|
146 | è¦ãããï¼
|
---|
147 |
|
---|
148 | ã»TMAX_INTNO : å²è¾¼ã¿çªå·ã®æ大å¤(é常ã®å²è¾¼ã¿çªå· + 15)
|
---|
149 | ã»TMIN_INTPRI : å²è¾¼ã¿åªå
|
---|
150 | 度ã®æå°å¤ï¼æé«å¤ï¼
|
---|
151 | ã»TIC_NUME : ã¿ã¤ã ãã£ãã¯ã®å¨æã®åå
|
---|
152 | ã»TIC_DENO : ã¿ã¤ã ãã£ãã¯ã®å¨æã®åæ¯
|
---|
153 | ã»INTPRI_TIMER : ã¿ã¤ãå²è¾¼ã¿å²è¾¼ã¿åªå
|
---|
154 | 度
|
---|
155 | ã»INTATR_TIMER : ã¿ã¤ãå²è¾¼ã¿ã®å²è¾¼ã¿å±æ§
|
---|
156 | ã»DEFAULT_ISTKSZ : ã¹ã¿ãã¯ãµã¤ãºï¼16byteåä½ã§æå®ï¼
|
---|
157 |
|
---|
158 |
|
---|
159 | (6) ãã£ã¬ã¯ããªæ§æã»ãã¡ã¤ã«æ§æ
|
---|
160 | ./arch/arm64/
|
---|
161 | ./MANIFEST
|
---|
162 | ./Makefile.prc
|
---|
163 | ./arm64.h
|
---|
164 | ./gic_config.c
|
---|
165 | ./gic_config.h
|
---|
166 | ./gic_support.S
|
---|
167 | ./prc_cfg1_out.h
|
---|
168 | ./prc_check.trb
|
---|
169 | ./prc_config.c
|
---|
170 | ./prc_config.h
|
---|
171 | ./prc_design.txt
|
---|
172 | ./prc_kernel.h
|
---|
173 | ./prc_kernel.trb
|
---|
174 | ./prc_rename.def
|
---|
175 | ./prc_rename.h
|
---|
176 | ./prc_sil.h
|
---|
177 | ./prc_stddef.h
|
---|
178 | ./prc_support.S
|
---|
179 | ./prc_sym.def
|
---|
180 | ./prc_test.h
|
---|
181 | ./prc_timer.c
|
---|
182 | ./prc_timer.cfg
|
---|
183 | ./prc_timer.h
|
---|
184 | ./prc_unrename.h
|
---|
185 | ./prc_user.txt
|
---|
186 |
|
---|
187 | (12) ãã¼ã¸ã§ã³å±¥æ´
|
---|
188 |
|
---|
189 | 2018/05/30
|
---|
190 | ã»æåã®ãªãªã¼ã¹
|
---|