Архив за Февраль 2013

Сборка ядра на примере kindle 3: сборка ядра

Скачиваем архив k3-kernel.tar.zip и разворачиваем его в домашнем каталоге.

Структура в каталоге kernel:

arm-2012.09 - компилятор
extract-image - утилиты для разборки ядра
initramfs - тут должен лежать развернутый образ
v3.3 - ядро и патчи (уже наложены)

Собираем ядро:

  1. Извлекаем uImage из kindle и размещаем его в extract-image
  2. unpack.sh uImage
  3. каталог image перемещаем в initramfs
  4. . ./make.rc
  5. cd v3.3/linux-2.6.26
  6. kmake menuconfig
  7. kmake modules
  8. kmake uImage
  9. kmake targz-pkg

Результат:

  • ядро — arch/arm/boot/uImage
  • модули — linux-2.6.26-rt-lab126.tar.gz

 

Теги:

Сборка ядра на примере kindle 3: ядро не загружется

Ядро собрано, залито на kindle, но нифига не работает :(

В консоли только сообщение о что kernel uncompresed.

Это означает, что загрузка ядра прошла, оно запустилось, но далее непонятно.

Сообщения от ядра не доходят до консоли, т.к. стандартный printk еще не может отправить сообщение.

Активирование отладочной информации:

  • выполняем  kmake menuconfig
  • Boot options  —>

(debug console=ttymxc0,115200 mem=256M panic=10 root=/dev/mmcblk0p1 ro ip=none lpj=2555904

  • Kernel hacking  —>

[*] Kernel debugging

[*] Kernel low-level debugging functions
[*]   Kernel early console

  •  сохраняем и выходим
  • далее nano kernel/printk.c (добавим строчки, убрав +)
+extern void printascii(const char*);
asmlinkage int vprintk(const char *fmt, va_list args)//строка 691
 
+printascii(printk_buf);
/* строка 745
 * Copy the output into log_buf.  If the caller didn't provide
 * appropriate log level tags, we insert them here
*/
  • компилируем, загружаем в kindle.
  • в консоли увидим много интересного

Скачать патч my-k3-v3.3-printk.patch

 

Теги:

Сборка ядра на примере kindle 3: разбираем ядро

Для начала выдираем ядро.

Например, так :

dd of=/dev/sdb of=uImage bs=1 seek=$((0x41000)) count=$(((512*7688)-0x41000))

То, что это ядро, определяет строка «Linux-2.6.26-rt-lab126» почти в самом начале файла.

Теперь надо из него выделить (скачать extract-image.tar):

1. config — утилита extract-config-uimage.sh (чуть правленый скрипт extract-ikconfig из ядра)

2. imageramfs — утилита unpack.sh (оригинал)

PS. config.gz также можно взять на самом kindle в каталоге /proc

 

Теги: , , , ,

Сборка ядра на примере kindle 3: структура диска и backup

Внимание! Батарея должна быть заряжена, иначе могут быть неприятные глюки.

Бэкап можно сделать несколькими путями:

  • с помощью ATK — просто и работает на «окирпиченом» устройстве
  • через Recovery menu (диск Lab126 Amazon Kindle), монтируя как диск в линухе — требуется специальный адаптер и переходник, работает только на «живом» ядре (статья, статья 1, статья 2)
  • через Recovery menu — можно попасть в меню через кнопку Enter.
  • используя usbnet — нужно ставить jailbreak+sshd
  • используя специальные апдейты (например от siralex) — нужно ставить jailbreak, но достаточно просто. Восстанавливаем через ATK.

Для начала надо рассмотреть структуру диска (fdisk -l):

Disk /dev/sdb: 4001 MB, 4001366016 bytes, 7815168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x489339d6
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        7688     1338943      665628   83  Linux     -- rootfs
/dev/sdb2         1338944     1388095       24576   83  Linux     -- ??
/dev/sdb3         1388096     1404479        8192   83  Linux     -- ??
/dev/sdb4         1404480     7815167     3205344    b  W95 FAT32 -- образ диска с FAT32!

А теперь структура, находящяяся ниже 7688 и rootfs:

#image     / start_addr description   / length=dec/hex
#atk-*.bin / 0x00000000 Partition Map / len=1024/0x400
dd if=atk.bin of=/dev/mmcblk0 bs=1024 seek=0
#dcdheader.bin / 0x00000400 DCD Header / len=2048/0x800
dd if=dcdheader.bin of=/dev/mmcblk0 bs=1024 seek=$((1024/1024))
#u-boot.bin / 0x00000C00 Boot Loader / len=263168/0x40400
dd if=u-boot.bin of=/dev/mmcblk0 bs=1024 seek=$((3072/1024))
#uImage / 0x00041000 Linux Kernel / len=3407872/0x340000
dd if=uImage of=/dev/mmcblk0 bs=1024 seek=$((266240/1024))
#*.wbf / 0x00381000 ISIS Waveform / len=262144/0x40000
dd if=k3.wbf of=/dev/mmcblk0 bs=1024 seek=$((3674112/1024))
#rootfs / 0x003C1000 Root filesystem / len=681603072/0x28a07000
dd if=rootfs.img of=/dev/mmcblk0 bs=1024 seek=$((3936256/1024))

 

 

 

Теги: ,

Сборка ядра на примере kindle 3: ссылки

Ссылки по теме:

Serial adapter — Manual по воскрешению Kindle 3, Kindle Serial Line адаптер, Kindle 3 serial plug designs

Jailbreak , backup и прочее — Мои хаки для Kindle 3

Ссылки на все :) — MobilRead Wiki Tools Index

пароль для root — Amazon Kindle root password tool

исходники на Амазоне — Source Code Notice

Сборка ядра — Buildroot a linux 2.6.26-lab126 kernal. (3.3)  , патч на 3.3

отладка ядра — Debugging early kernel booting problems

Теги: ,