211 | | CONFIG_MODULES hello:%CONFIGPATH |
212 | | }}} |
213 | | On note que la définition des processeurs changent. On indique qu'il s'agit de 4 mips de type bigendian. |
| 215 | CONFIG_MODULES examples/hello:%CONFIGPATH |
| 216 | |
| 217 | # definitions of the memory sections where to put things |
| 218 | CONFIG_ROM_ADDR 0x60100000 |
| 219 | CONFIG_ROM_SIZE 0x00100000 |
| 220 | |
| 221 | CONFIG_RAM_ADDR 0x62600000 |
| 222 | CONFIG_RAM_SIZE 0x00100000 |
| 223 | |
| 224 | # Add an hardware enumerator |
| 225 | CONFIG_FDT |
| 226 | CONFIG_DRIVER_ENUM_FDT |
| 227 | }}} |
| 228 | |
| 229 | On note que la définition des processeurs change. On indique qu'il s'agit de 4 mips de type bigendian. |
222 | | Le résultat: |
223 | | {{{ |
224 | | Configuration token name Declare location |
225 | | =============================================================================== |
226 | | |
227 | | CONFIG_ARCH_EMU (arch/emu/emu.config:2) |
228 | | CONFIG_ARCH_IBMPC (arch/ibmpc/ibmpc.config:2) |
229 | | CONFIG_ARCH_SIMPLE (arch/simple/simple.config:2) |
230 | | + CONFIG_ARCH_SOCLIB (arch/soclib/soclib.config:2) |
231 | | CONFIG_CLUSTER (arch/arch.config:8) |
232 | | m CONFIG_CPU_MAXCOUNT (cpu/cpu.config:2) |
233 | | + CONFIG_CPU_MIPS (cpu/mips/mips.config:2) |
234 | | CONFIG_CPU_MIPS_ABI_EABI (cpu/mips/mips.config:40) |
235 | | CONFIG_CPU_MIPS_ABI_N32 (cpu/mips/mips.config:34) |
236 | | + CONFIG_CPU_MIPS_ABI_O32 (cpu/mips/mips.config:22) |
237 | | CONFIG_CPU_MIPS_ABI_O64 (cpu/mips/mips.config:28) |
238 | | v CONFIG_CPU_MIPS_VERSION (cpu/mips/mips.config:16) |
239 | | ... |
240 | | (+) defined, (p) provided, (m) mandatory, (v) value. |
241 | | }}} |
| 239 | |
| 240 | Voir BuildSystem pour plus d'informations |
| 241 | |
| 242 | == Description de la plateforme == |
| 243 | |
| 244 | On voit qu'on a ajouté un token `CONFIG_ARCH_DEVICE_TREE` dans le fichier de configuration, celui-ci sert à |
| 245 | dire qu'on a une définition de la plateforme sous forme d'un FlattenedDeviceTree qui accompagne le kernel. |
| 246 | |
| 247 | Il faut en fait compiler cette description dans le kernel, en l'ajoutant dans la Makefile. Le fichier `hello/Makefile` contient alors: |
| 248 | |
| 249 | {{{ |
| 250 | objs = hello.o platform.o |
| 251 | }}} |
| 252 | |
| 253 | Il faut ensuite ajouter un fichier `platform.dts`, au format accepté par l'utilitaire `dtc`, contenant la définition de la plateforme. Ce format est issu de l'IEEE1275 (Open Firmware). |
| 254 | |
| 255 | {{{ |
| 256 | /dts-v1/; |
| 257 | |
| 258 | / { |
| 259 | model = "MutekH_Tutorial"; |
| 260 | compatible = "MutekH_Tutorial"; |
| 261 | #address-cells = <1>; |
| 262 | #size-cells = <1>; |
| 263 | |
| 264 | cpus { |
| 265 | #address-cells = <1>; |
| 266 | #size-cells = <0>; |
| 267 | Mips,32@0 { |
| 268 | name = "Mips,32"; |
| 269 | device_type = "cpu"; |
| 270 | reg = <0>; |
| 271 | }; |
| 272 | |
| 273 | Mips,32@1 { |
| 274 | name = "Mips,32"; |
| 275 | device_type = "cpu"; |
| 276 | reg = <1>; |
| 277 | }; |
| 278 | |
| 279 | Mips,32@2 { |
| 280 | name = "Mips,32"; |
| 281 | device_type = "cpu"; |
| 282 | reg = <2>; |
| 283 | }; |
| 284 | |
| 285 | Mips,32@3 { |
| 286 | name = "Mips,32"; |
| 287 | device_type = "cpu"; |
| 288 | reg = <3>; |
| 289 | }; |
| 290 | |
| 291 | }; |
| 292 | |
| 293 | tty@0 { |
| 294 | device_type = "soclib:tty"; |
| 295 | tty_count = <1>; |
| 296 | reg = <0x90600000 0x10>; |
| 297 | icudev = &{/icu@0}; |
| 298 | irq = <1>; |
| 299 | }; |
| 300 | |
| 301 | icu@0 { |
| 302 | device_type = "soclib:icu"; |
| 303 | input_count = <2>; |
| 304 | reg = <0x20600000 0x20>; |
| 305 | icudev = &{/cpus/Mips,32@0}; |
| 306 | irq = <0>; |
| 307 | }; |
| 308 | |
| 309 | timer@0 { |
| 310 | device_type = "soclib:timer"; |
| 311 | timer_count = <1>; |
| 312 | reg = <0x01620000 0x10>; |
| 313 | icudev = &{/icu@0}; |
| 314 | irq = <0>; |
| 315 | }; |
| 316 | |
| 317 | memory@0 { |
| 318 | device_type = "memory"; |
| 319 | cached; |
| 320 | memreg: reg = <0x61100000 0x00100000>; |
| 321 | }; |
| 322 | |
| 323 | memory@1 { |
| 324 | device_type = "memory"; |
| 325 | memreg: reg = <0x62600000 0x00100000>; |
| 326 | }; |
| 327 | |
| 328 | chosen { |
| 329 | console = &{/tty@0}; |
| 330 | }; |
| 331 | }; |
| 332 | }}} |
| 333 | |
245 | | La plateforme mutek_basic s'adapte automatique à la configuration des sources de MutekH (type de cpu, ...). |
246 | | il faut donc ajouter un lien symbolique dans le repertoire de la plateforme soclib mutek_basic vers les sources de MutekH. |
247 | | {{{ |
248 | | cd ~/soclib/soclib/platform/topcells/caba-vgmn-mutekh_tutorial-mipsel_mipseb_ppc405 |
249 | | ln -s ~/mutekh |
250 | | }}} |
251 | | Par ailleurs, Mutekh doit connaitre les adresses liées au matériel de la plateforme, Il faut donc ajouter des liens symboliques dans le repertoire de mutekh vers la description des adresses de la plateforme: |
252 | | {{{ |
253 | | cd ~/mutekh |
254 | | ln -s ~/soclib/soclib/platform/topcells/caba-vgmn-mutekh_tutorial-mipsel_mipseb_ppc405/soclib_addresses.h |
255 | | ln -s ~/soclib/soclib/platform/topcells/caba-vgmn-mutekh_tutorial-mipsel_mipseb_ppc405/soclib_addresses.ldscript.m4 |
256 | | }}} |
257 | | On commence par compiler le système MutekH avant de compiler la plateforme. |
| 337 | La plateforme mutek_tutorial s'adapte automatique à la configuration des sources de MutekH (type de cpu, ...). |
| 338 | De plus, on peut compiler le noyau depuis le répertoire de la plateforme, donc en dehors de l'arborescence de MutekH. |
| 339 | |
| 340 | La Makefile fournie contient tout le code nécessaire. Elle a besoin de 3 variables: |
| 341 | `MUTEKH_DIR`:: |
| 342 | Le répertoire contenant les sources de MutekH |
| 343 | `APP`:: |
| 344 | Le répertoire contenant les sources de l'application (ici le répertoire de hello) |
| 345 | `CONFIG`:: |
| 346 | Le fichier de configuration, dans le répertoire de la plateforme |
| 347 | |