Jump to content

    

линукс на ARM

Приветствую,

 

изучаю порт U-Boot на ARM/Versatile с тем, чтобы понять нюансы инициализации железа для последующей загрузки Linux.

 

В соответствии с докой с http://infocenter.arm.com/ SDRAM на этой платформе (128MB) организован через CS0 и мапится в диапозон 0x0000_0000-0x0800_0000. Порт U-Boot для Versatile определяет переменную TEXT_BASE=0x0100_0000 (адрес по которому в память будет грузиться uboot), т.е. это отстоит на 16MB от 0x0; в свою очередь порт Linux на эту платформу определяет адрес загрузки ядра -> 0x0000_8000, т.е. на 32kB от начала области RAM.

 

Отсюда вопрос:

1) с какой целью сооздается "дырка" в 16MB, предполагается, что туда ляжет ядро, initrd и еще что-то?

2) почему нельзя ядро разместить по адресу 0x0, и не делать 32kB отступ?

3) почему нельзя сделать так: с адреса 0x0 и выше положить загрузчик вместе с областью для параметров, передаваемых ядру (Uboot редко занимает более 200Kb), а следом грузить линукс?

 

Буду признателен за пояснения.

Share this post


Link to post
Share on other sites
Приветствую,

 

изучаю порт U-Boot на ARM/Versatile с тем, чтобы понять нюансы инициализации железа для последующей загрузки Linux.

 

В соответствии с докой с http://infocenter.arm.com/ SDRAM на этой платформе (128MB) организован через CS0 и мапится в диапозон 0x0000_0000-0x0800_0000. Порт U-Boot для Versatile определяет переменную TEXT_BASE=0x0100_0000 (адрес по которому в память будет грузиться uboot), т.е. это отстоит на 16MB от 0x0; в свою очередь порт Linux на эту платформу определяет адрес загрузки ядра -> 0x0000_8000, т.е. на 32kB от начала области RAM.

 

Отсюда вопрос:

1) с какой целью сооздается "дырка" в 16MB, предполагается, что туда ляжет ядро, initrd и еще что-то?

2) почему нельзя ядро разместить по адресу 0x0, и не делать 32kB отступ?

3) почему нельзя сделать так: с адреса 0x0 и выше положить загрузчик вместе с областью для параметров, передаваемых ядру (Uboot редко занимает более 200Kb), а следом грузить линукс?

 

Буду признателен за пояснения.

Есть такая штука - стандарт. И в чипах и в линукс.

Так например с 0 у ARM идет Exception Vectors

Кроме того

linux/Documentation/arm/Booting

linux/Documentation/arm/Setup

linux/Documentation/arm/Porting

linux/Documentation/arm/memory.txt

Share this post


Link to post
Share on other sites

Приветствую,

 

спасибр за ответ.

Есть такая штука - стандарт. И в чипах и в линукс.

Так например с 0 у ARM идет Exception Vectors

Кроме того

linux/Documentation/arm/Booting

linux/Documentation/arm/Setup

linux/Documentation/arm/Porting

linux/Documentation/arm/memory.txt

 

Про вектора я как-то опять забыл :( И невнимательно читал linux/Documentation/arm/Booting, а там четко сказано:

 

The zImage may also be placed in system RAM (at any location) and

called there. Note that the kernel uses 16K of RAM below the image

to store page tables. The recommended placement is 32KiB into RAM.

 

Собственно, в первые 16KB в памяти кладется tagged list, в следующие 16 - page table. Это ответ на один мой глупый вопрос :) Но размещать загрузчик на 16mb от начала памяти - не многовато ли это для ядра и initrd?

 

PS. вот хорошая ссылка на описание загрузки - http://www.simtec.co.uk/products/SWLINUX/f...ng_article.html

Share this post


Link to post
Share on other sites
Но размещать загрузчик на 16mb от начала памяти - не многовато ли это для ядра и initrd?

Нет. Памяти мало не бывает :).

Кроме того, Сколько ядро займет после распаковки? А собственно с какого адреса начинает заливаться распакованное ядро, то что получится после "decompressing kernel .........................................ok"?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this