Часть 2. Ядро.Подготовка.Берём ядро от Android. Я брал стоковое ядро от самуснга Update2 (
отсюда)
Для самсунговского ядра нужно скопировать содержимое папки delta в папку kernel с заменой. Аккуратнее, не перепутайте, внутри kernel есть ещё одна папка kernel, копировать надо в первую.
Здесь папка kernel (котрая рядом с delta и modules) будет являться отправной точкой для всех путей.Если берёте другие ядра, то вам не нужна initramfs, потому что сейчас она не используется.
На этом шаге вам понадобится патч фреймбуфера от
tom3q. Если нет аккаунта на Самдроиде, то внизу сообщения есть версия 4 этого патча. 5я пока не совместима с 2D/3D дровами от Самса.
Применяем патч к ядру.
Теперь у фреймбуфера появилась поддержка косноли. НО, пока консоль будет пустой, нам надо ещё перевести вывод на неё. Для этого находим в файле kernel/arch/arm/kernel/setup.c строчку и комментируем:
//strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
Это заблокирует подачу ядру параметров от бутлоадера. В которых и указывалась консоль.
Во время конфигурирования мы внесём эти параметры в дефолтную строку параметров. Проверил параметры из бутлоадера - они бесполезны.
Необязательно, но можно сделать поправки в drivers/video/fbmem.c
fbmem_init(void)
{
proc_create("fb", 0, NULL, &fb_proc_fops);
if (register_chrdev(FB_MAJOR,"fb",&fb_fops))
printk("unable to get major %d for fb devs\n", FB_MAJOR);
//fb_class = class_create(THIS_MODULE, "graphics");
//if (IS_ERR(fb_class)) {
printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
fb_class = NULL;
//}
return 0;
}
Это перенесёт fb из /dev/graphics/ в /dev/ .
Теперь подправим Makefile:
# Alternatively CROSS_COMPILE can be set in the environment.
# Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH := arm
CROSS_COMPILE := /home/wolf/build/tools/cross/bin/arm-none-linux-gnueabi-
#CROSS_COMPILE := $(shell if [ -f .cross_compile ]; then \
cat .cross_compile; \
fi)
Естественно, путь у вас будет другой.
На этом подготовка исходников ядра заканчивается.
Конфигурирование.В качестве начальной настройки ядра можно взять конфиг из arch/arm/configs/ он называется
spica_android_defconfig, а можно взять мой из аттача.
В дефолтном не забываем вырубить initramfs. И добавить Default kernel command string
root=b301 rootfstype=ext2 rootdelay=1 rw init=/sbin/init fbcon=rotate:1 printk.time=n console=tty0 console=ttygs0,115200n8
В моём конфиге отключено всё, что содержит упоминание Android, исключая драйвер звуковухи.
Теперь можете конфигурировать ядро как захотите, только помните, что
в нём не должно быть ни одного модуля. У нас же нет initramfs.
Сборка ядра.Тут всё просто:
или
для многоядерников, где n - количество ядер * 2.
Для сборки его в tar (для Odin) я написал небольшой скриптик.
#/bin/sh
cd /home/wolf/build/source/i5700_kernel/kernel/arch/arm/boot &&
tar -cvf wolf_PDA.tar zImage &&
cp wolf_PDA.tar /media/FLASH &&
umount /media/FLASH
cd /home/wolf/build/source/i5700_kernel/kernel
скрипт запаковывает ядро в архив, копирует на флешку и извлекает её. Потом я прошиваю ядро с нетбука. Если подправите пути, то и вам этот скрипт будет хорошо служить.
Прошивать надо как и другие прошивки, но
только PDA.
Всё, на этом описани сборки ядра закончено.
Прикрепленные файлы
framebuffer_v4.patch.zip ( 4.23 КБ )
config.zip ( 9.31 КБ )
Сообщение отредактировал -WOLF- - 26.02.12, 14:25Причина редактирования: Обновил инструкцию согласно последним изменениям.