[LINUX] Architecture ARM »Portage

À l'origine, il fait partie du code source du noyau Linux, il sera donc traité comme GPLv2 (reconnaissance qu'il devrait l'être).

https://www.kernel.org/doc/html/latest/index.html

Licensing documentation

The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.

https://www.kernel.org/doc/html/latest/process/license-rules.html#kernel-licensing

https://www.kernel.org/doc/html/latest/arm/porting.html


Porting

Taken from list archive at http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2001-July/004064.html

Initial definitions

The following symbol definitions rely on you knowing the translation that __virt_to_phys() does for your machine. This macro converts the passed virtual address to a physical address. Normally, it is simply:

Les définitions de symboles suivantes supposent que vous connaissez la conversion que __virt_to_phys () effectue pour votre machine. Cette macro traduit l'adresse virtuelle transmise en une adresse physique. Habituellement, c'est simple:

phys = virt - PAGE_OFFSET + PHYS_OFFSET

Decompressor Symbols

ZTEXTADDR

Start address of decompressor. There’s no point in talking about virtual or physical addresses here, since the MMU will be off at the time when you call the decompressor code. You normally call the kernel at this address to start it booting. This doesn’t have to be located in RAM, it can be in flash or other read-only or read-write addressable medium.

L'adresse de départ du décompresseur. Peu importe qu'il s'agisse d'une adresse virtuelle ou d'une adresse physique, mais la MMU est désactivée lors de l'appel du code du décompresseur. Normalement, le noyau appelle cette adresse au démarrage. Il ne doit pas s'agir de RAM, il peut s'agir de supports Flash ou d'autres supports en lecture seule, lecture-écriture.

ZBSSADDR

Start address of zero-initialised work area for the decompressor. This must be pointing at RAM. The decompressor will zero initialise this for you. Again, the MMU will be off.

Adresse de démarrage de la mémoire de travail initialisée à 0 pour le décompresseur. Il doit être en RAM. Le décompresseur initialisera ceci avec 0. Là encore, la MMU doit être désactivée.

ZRELADDR

This is the address where the decompressed kernel will be written, and eventually executed. The following constraint must be valid:

L'adresse où le noyau décompressé est écrit et exécuté. Celui-ci doit répondre aux contraintes suivantes:

__virt_to_phys(TEXTADDR) == ZRELADDR

The initial part of the kernel is carefully coded to be position independent.

La partie initialisation du noyau est soigneusement codée pour un code indépendant de la position.

INITRD_PHYS

Physical address to place the initial RAM disk. Only relevant if you are using the bootpImage stuff (which only works on the old struct param_struct).

RAM initiale L'adresse physique où se trouve le disque. Uniquement pertinent si vous utilisez bootpImage (fonctionne uniquement avec l'ancienne structure param_struct).

INITRD_VIRT

Virtual address of the initial RAM disk. The following constraint must be valid:

RAM initiale L'adresse virtuelle où se trouve le disque. Celui-ci doit répondre aux contraintes suivantes:

__virt_to_phys(INITRD_VIRT) == INITRD_PHYS

PARAMS_PHYS

Physical address of the struct param_struct or tag list, giving the kernel various parameters about its execution environment.

L'adresse physique de la structure param_struct ou de la liste de balises, qui fournit au noyau divers paramètres liés à l'achèvement de l'exécution.

Kernel Symbols

PHYS_OFFSET

Physical start address of the first bank of RAM.

L'adresse physique où commence la première banque de RAM.

PAGE_OFFSET

Virtual start address of the first bank of RAM. During the kernel boot phase, virtual address PAGE_OFFSET will be mapped to physical address PHYS_OFFSET, along with any other mappings you supply. This should be the same value as TASK_SIZE.

L'adresse virtuelle où commence la première banque de RAM. Pendant la phase de démarrage du noyau, l'adresse virtuelle PAGE_OFFSET est mappée à l'adresse physique PHTS_OFFSET, avec d'autres mappages spécifiés par l'utilisateur. Cela doit être la même valeur que TASK_SIZE.

TASK_SIZE

The maximum size of a user process in bytes. Since user space always starts at zero, this is the maximum address that a user process can access+1. The user space stack grows down from this address.

Taille maximale du processus utilisateur, en octets. L'espace utilisateur commence toujours à 0, c'est donc l'adresse +1 à laquelle le processus utilisateur peut accéder. La pile d'espace utilisateur se développe à partir de cette adresse.

Any virtual address below TASK_SIZE is deemed to be user process area, and therefore managed dynamically on a process by process basis by the kernel. I’ll call this the user segment.

Les adresses virtuelles inférieures à TASK_SIZE sont considérées comme une zone du processus utilisateur et sont gérées dynamiquement par le noyau sur une base par processus. C'est ce qu'on appelle un segment d'utilisateurs.

Anything above TASK_SIZE is common to all processes. I’ll call this the kernel segment.

Tout ce qui dépasse TASK_SIZE sera commun à tous les processus. C'est ce qu'on appelle un segment de noyau.

(In other words, you can’t put IO mappings below TASK_SIZE, and hence PAGE_OFFSET).

(En d'autres termes, le mappage IO ne peut pas être placé après TASK_SIZE, il doit donc être placé après PAGE_OFFSET)

TEXTADDR

Virtual start address of kernel, normally PAGE_OFFSET + 0x8000. This is where the kernel image ends up. With the latest kernels, it must be located at 32768 bytes into a 128MB region. Previous kernels placed a restriction of 256MB here.

L'adresse de départ du noyau dans l'espace virtuel, généralement PAGE_OFFSET + 0x8000. Ceci est la position finale de l'image du noyau. Dans les noyaux modernes, il devrait être dans une région comprise entre 32768 octets et 128 Mo. Le noyau traditionnel a une limite de 256 Mo.

DATAADDR

Virtual address for the kernel data segment. Must not be defined when using the decompressor.

L'adresse virtuelle du segment de données du noyau. Si vous utilisez le décompresseur, ne le définissez pas.

VMALLOC_START / VMALLOC_END

Virtual addresses bounding the vmalloc() area. There must not be any static mappings in this area; vmalloc will overwrite them. The addresses must also be in the kernel segment (see above). Normally, the vmalloc() area starts VMALLOC_OFFSET bytes above the last virtual RAM address (found using variable high_memory).

L'adresse virtuelle qui borde la zone vmalloc (). Il ne doit y avoir aucun mappage statique dans cette zone. vmalloc les écrase. L'adresse doit également être incluse dans le segment du noyau (ci-dessus). La zone vmalloc () commence généralement à VMALLOC_OFFSET octets et est située à la fin de l'adresse RAM sur l'adresse virtuelle (découverte à l'aide de la variable high_memory).

VMALLOC_OFFSET Offset normally incorporated into VMALLOC_START to provide a hole between virtual RAM and the vmalloc area. We do this to allow out of bounds memory accesses (eg, something writing off the end of the mapped memory map) to be caught. Normally set to 8MB.

Architecture Specific Macros

BOOT_MEM(pram,pio,vio)

pram specifies the physical start address of RAM. Must always be present, and should be the same as PHYS_OFFSET.

pram spécifie l'adresse de départ physique de la RAM. Doit toujours être présent et doit être identique à PHYS_OFFSET.

pio is the physical address of an 8MB region containing IO for use with the debugging macros in arch/arm/kernel/debug-armv.S.

pio est l'adresse physique de la zone de 8 Mo contenant l'IO utilisé par la macro de débogage dans arch / arm / kernel / debug-armv.S.

vio is the virtual address of the 8MB debugging region.

vio est l'adresse virtuelle de la zone de débogage de 8 Mo.

It is expected that the debugging region will be re-initialised by the architecture specific code later in the code (via the MAPIO function).

La zone de débogage devrait être réinitialisée ultérieurement dans le code par le code spécifique à l'architecture (via la fonction MAPIO).

BOOT_PARAMS

Same as, and see PARAMS_PHYS.

Veuillez vous y référer car il est identique à PARAMS_PHYS.

FIXUP(func)

Machine specific fixups, run before memory subsystems have been initialised.

Processus de correction spécifique à la machine. Il s'exécute avant l'initialisation des sous-systèmes de mémoire.

MAPIO(func)

Machine specific function to map IO areas (including the debug region above).

Fonction de mappage de zone d'E / S spécifique à la machine (y compris la région de débogage mentionnée ci-dessus)

INITIRQ(func)

Machine specific function to initialise interrupts.

Fonction d'interruption initiale spécifique à la machine.

Recommended Posts

Architecture ARM »Portage
Portage de MicroPython
Exécutez Linux avec l'architecture ARM à l'aide de QEMU