Загрузка ядра Linux останавливается при распаковке Linux ... Хорошо, загрузка ядра - PullRequest
2 голосов
/ 20 февраля 2012

У меня проблема с переносом ядра со старого SH4 на новый SH4. Пожалуйста, позвольте мне показать разницу между ними.

[Старый SH4]
загрузчик: redboot v2.0
версия ядра: 2.4

[Новый SH4]
загрузчик: u-boot v2009.03
версия ядра: 2.6

В старом SH4 большая часть исходного кода разрабатывается на основе ядра 2.4, поэтому перенос ядра 2.4 на новый SH4 выглядит проще, чем перекомпиляция исходных кодов в ядре 2.6. Поэтому я применил mkimage к zImage, который был разработан для старого SH4, как показано ниже.

mkimage -A sh -O linux -T kernel -C none -a 0x8c210000 -e 0x8c210000 -n 'Old kernel' -d zImage uImage

Это изображение загружено на новый SH4, как показано ниже.

tftpboot 8c800000 uImage
cp.b $(fileaddr) a0100000 $(filesize)
bootm a0100000

Однако загрузка останавливается после «Распаковка Linux ... Хорошо, загрузка ядра» и зависает. Я обнаружил, что бесконечный цикл происходит в следующих строках на kernel / head.S, но я полагаю, что у этих строк нет проблем, потому что kernel / head.S не настроен и работает на старом SH4.

   !               Clear BSS area
   mov.l   3f, r1 ! __bss_start
   add     #4, r1
   mov.l   4f, r2 ! _end
   mov     #0, r0
9: cmp/hs r2, r1
   bf/s    9b     ! while (r1 &lt r2)
   mov.l  r0,@-r2

Таким образом, я полагаю, что эта проблема возникает из-за разницы в окружающей среде между старым и новым SH4. В старом SH4 я выполняю команду fconfig и устанавливаю переменные, как показано ниже.

Load Linux Kernel & File System: true
Linux Kernel Destination address: 0x8c210000
Linux Kernel Source address: 0x80140000
Linux Kernel Size: 0x100000
RAM disk Destination address: 0x8c360000
RAM disk Source address: 0x80140000
RAM disk Size: 0x400000
Modify Linux Kernel Parameter: true
Linux Kernel base address: 0x8c001000
Linux Kernel ENTRY address: 0x8c210000
Linux Kernel INITRD size: 0xc00000
Linux Kernel INITRD start address: 0x360000
Linux Kernel loader type: 1
Linux Kernel mount root read only: 1
Linux Kernel original root device: 0x100
Linux Kernel RAM disk flags: 0
Linux Kernel Enable Virtual Terminal Console: false

Я думаю, что могу установить эти параметры на новом SH4, хотя у u-boot нет команды fconfig. Но я не смог найти, как установить параметры Исходный адрес ядра Linux и Базовый адрес ядра Linux. Это связано с проблемой зависания? Или любой совет о том, что мне следует проверить дальше, будет полезен, так как я новичок во встроенной системе Linux.

Спасибо за вашу помощь.

[Изменено]
Ниже добавлена ​​информация для отображения результатов печати при загрузке.

bootcmd = icache на
bootm a0100000
BootDelay = 2
бод = 115200
маска подсети = 255.255.255.0
IPADDR = 192.168.1.2
ServerIP = 192.168.1.1
gatewayip = 0.0.0.0
bootargs = console = ttySC1,115200, N, 8 mem = 32M ether = 8,0x1300,0,0, eth0 video = e1356fb: система: ms104sh4, дисплей: crt, bpp: 8,800x600 @ 60
STDIN = серийный
STDOUT = серийный
STDERR = серийный

1 Ответ

1 голос
/ 20 февраля 2012

Я никогда не работал с SH4, но это помогло мне в прошлом: http://www.denx.de/wiki/view/DULG/LinuxPostMortemAnalysis

...