Linux для Samsung Galaxy Spica (Linux вместо Android)



Реп: (793)
Итак, это мой мануал по сборке Linux для Спики. Строго говоря, тема относится только к этому аппарату, но будет полезна всем, кто хочет собрать Linux под свой смартфон.

Зачем оно нужно
Скажу прямо, я не люблю Android. Вот, что я хочу получить от системы (по сравнению с Android):
1) Производительность. Байткод не самое быстрое решение, мне больше по-нраву нативные приложения.
2) Время работы от батареи. Вытекает из предыдущего пункта.
3) Кастомизация. Можно вопить о том, что Android позволяет любые изменения, но на деле он сильно уступает настольным Linux.
4) Приложения. Есть куча хороших приложений, которых ещё нет ни на одной мобильной ОС. Портирование их на WP, iOS и Android - очень непростая вещь.
Что потеряет система:
1) Совместимость на уровне бинарников. Но меня мало заботит участь х86 планшетов, на них и получше ОСь можно поставить. ARM всё равно будут совместимы.
2) Игры. Тут всё плохо, но может чего у Maemo/MeeGo/Tizen упрём ;)


Linux на Samsung Galaxy J1 (2016)

Список людей, которые занимаются портированием на различные устройства

Задание для дизайнеров.

Инструкция для абстрактного Android смартфона.

Настройка клавиатуры с нуля.

Мой github

Видео с обзором состояния проекта (Galaxy Spica)

Содержание:(устарело)
Часть 1. Подготовка.
Часть 2. Ядро.
Часть 3. Снова подготовка. Файловая система.
Часть 4. Glibc.
Часть 5. SysVInit.
Часть 6. Ncurses.
Часть 7. zlib.
Часть 8. util-linux.
Часть 9. kmod.
Часть 11. libusb.
Часть 12. usbtools.
Часть 13. pcitools.

Состояние (устарело)
LFS
Ядро 2.6.29
Собрано:
  • glibc 2.15 (или 2.14, точно не помню уже)
  • ncurses 5.9
  • zlib 1.2.6
  • libusb 1.0.8
  • gperf 3.0.4
  • gmp 5.0.4
  • mpfr 3.1.0
  • mpc 0.9
  • kmod 5
  • sisvinit 2.88dsf
  • udev 178
  • usbutils 005
  • util-linux 2.20
  • pciutils 3.1.9
  • coreutils 8.15
  • bash 4.2
  • gcc 4.6.2

Система не грузится, нужны стартовые скрипты. Вроде, для консоли всё готово.

Angstrom
Ядро 2.6.29
В наличии все основные консольные утилиты.
Система загружается, есть консоль через USB. Из оболочек запустились GPE (Matchbox) и XFCE. Enlightenment не заработал. Остальные не тестировались. Системе доступно 162МБ ОЗУ, на чистой системе свободно ~90-100МБ, с запущенным Firefox 3.6 (две вкладки с ошибкой соединения) ~50МБ.
Работает:
  • Экран
  • Xorg
  • Тачскрин
  • SD

Не работает:
  • Звук
  • Клавиатура (есть виртуальная)
  • Модем (даже самой звонилки нет)
  • Wi-Fi
  • Bluetooth
  • NAND
  • ...

Стоит отметить, что большинство нерабочих вещей на самом деле работают, но не видятся системой. Ядро то стандартное.
Прикрепленное изображение
Прикрепленное изображение

Прикрепленное изображение Прикрепленное изображение Прикрепленное изображение

Ubuntu
Ядро 2.6.29 (сама система собиралась для 2.6.28)
Система имеет весь набор основных утилит, графическая оболочка - XFCE.
Система грузится, но, видимо, не до конца. Тем не менее, мне удалось настроить консоль по USB. Предварительный диагноз: неверный конфиг udev'а. В системе нет устройств fb, однако, fbcon каким-то магическим образом работает. Если в консоли выполнить "mknod /dev/fb0 c 29 0", то можно будет запустить X11.



Благодарности:
Список людей, которые прямо или косвенно помогли в портировании.
tom3q - за пофиксенный драйвер framebuffer'а
reali - за активную помощь

ВАЖНО
Вся информация в теме предоставляется без каких-либо гарантий. Если ты превратишь свой телефон в кирпич, то это только твоя вина, тебя же не заставляли.
Инструкция слишком непонятна? Значит тебе ещё рано этим заниматься. Поверь мне, другие инструкции ещё не понятнее.
В инструкции слишком мало напоминаний, что где надо изменить? Значит ты недостаточно внимательный. Сборка системы требует предельного внимания.
Инструкция слишком медленно пополняется? Умный - напиши свою, нет - жди. Для меня главное - собрать систему, а не написать инструкцию.



Сообщение отредактировал -WOLF- - 12.02.18, 23:56



Реп: (793)
Часть 1. Подготовка.

Что понадобится:
1) Galaxy Spica
2) Карточка памяти (я использую 1ГБ из комплекта)
3) Linux на ПК (можно Live CD или виртуалку). У меня установлена Mageia 1
4) Windows. Для прошивки.
5) Интернет, чем быстрее, тем лучше. Качать надо будет много.

Ставим crosstool.
Берём отсюда свежую CodeSourcery. Нам нужна GNU/Linux, лучше инсталлер.
Делаем скачанный файл исполняемым.
$ chmod +x имя_файла

Запускаем
$ ./имя_файла

Следуем инструкциям установщика. Я устанавливал в папку /home/wolf/build/tools/cross, без создания ссылок, но с модификацией PATH.
Всё, у нас есть crosstool.



Реп: (793)
Часть 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.

Сборка ядра.
Тут всё просто:
$ make

или
$ make -jn

для многоядерников, где 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
Причина редактирования: Обновил инструкцию согласно последним изменениям.



Реп: (793)
UA1000,
Да просто сил уже сегодня нет, а так в шапке ещё много сделать надо.



Реп: (187)
-WOLF-, вот теперь я впервые по настоящему пожалел, что продал свою спику. Но все же, если чем-то смогу быть полезен - с удовольствием помогу! Системное программирование не знаю, но линуксом активно пользуюсь и администрирую - вдруг что надо будет? :blush:



Реп: (51)
Супер! Поддерживаем всеми руками!
Тестеры точно уже есть)

Кстати если нужна помощь с удовольствием поможем чем сможем!)

Сообщение отредактировал reali - 23.01.12, 04:23



Реп: (204)
-WOLF- @ 21.01.2012, 16:53 *
//strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);

Дык там же в конфиге есть параметр, где можно прописать строку консоли и отключить бутлодерную консоль.

-WOLF- @ 21.01.2012, 13:11 *
Часть 3. Снова подготовка. Файловая система.
Часть 4. Glibc.
Часть 5. SysVInit.

Y U NO USE OPENEMBEDDED? Ведь есть же SHR, с гуем для телефона, RIL. И система пакетов ipkg.
Также, на тебе initrd - http://www.kaa.org.ua/alex/rootfs.img.gz, там по дефолту телнет включается и usb0 присваивается адрес 10.8.0.2 - полезно для отладки, когда microsd не работает (как у меня на sgs2)

-WOLF- @ 21.01.2012, 13:11 *
Но меня мало заботит участь х86 планшетов, на них и получше ОСь можно поставить.

Так тонко, что даже толсто ;)



Реп: (793)
Alex_DFR @ 23.01.2012, 12:04 *
Дык там же в конфиге есть параметр, где можно прописать строку консоли и отключить бутлодерную консоль.

Ну просвети, где.

Alex_DFR @ 23.01.2012, 12:04 *
Y U NO USE OPENEMBEDDED? Ведь есть же SHR, с гуем для телефона, RIL. И система пакетов ipkg.

Знаю, но буду собирать с нуля, хотя, наверное, и сопру у них многое. Пакетным менеджером, скорее всего, будет rpm.

Alex_DFR @ 23.01.2012, 12:04 *
initrd

Для отладки удобнее грузиться с microSD с монолитным ядром. Меньше прошиваться надо.

Alex_DFR @ 23.01.2012, 12:04 *
когда microsd не работает

я её уже поднял :happy:



Реп: (204)
-WOLF- @ 23.01.2012, 14:43 *
Ну просвети, где.


Boot options ---> Kernel command line type (Always use the default kernel command string)

Прикрепленное изображение


-WOLF- @ 23.01.2012, 14:43 *
Знаю, но буду собирать с нуля, хотя, наверное, и сопру у них многое. Пакетным менеджером, скорее всего, будет rpm.

А зачем? Разделение труда же не просто так придумали ;). А если rpm, то, наверное, лучше Mer (meego), но там надо драйвер opengl es 2.0. Я собираюсь meego на sgs2 портировать, но пока проблемы с запуском некоторых устройств на ванильном ядре (а андроидное с хаками и костылями не хочу). А если время будет, то, думаю, стоит попробовать Aurora, новый телефонный гуй из SHR, без иксов запустить - он на qt4 написан.



Реп: (793)
Alex_DFR @ 23.01.2012, 17:29 *
Boot options ---> Kernel command line type (Always use the default kernel command string)

Это только в новых ядрах, в том, что я собирал, такого ещё нет.

Alex_DFR @ 23.01.2012, 17:29 *
А зачем? Разделение труда же не просто так придумали ;)

Что именно ты хочешь этим сказать? Я не собираюсь всё с нуля писать, я просто собираю систему.
В качестве оболочки, наверное, возьму что-нибудь на GTK. Может GPE.
rpm'ки из MeeGo я тоже хочу, в шапке ж написано
Впрочем, никто ж не запрещает тебе собирать на базе этой всё, что захочешь. Я не против, если будет выбор оболочек, только за, в этом и есть смысл.

Сообщение отредактировал -WOLF- - 23.01.12, 18:40



Реп: (204)
-WOLF- @ 23.01.2012, 19:37 *
Что именно ты хочешь этим сказать? Я не собираюсь всё с нуля писать, я просто собираю систему.
В качестве оболочки я, наверное, возьму что-нибудь на GTK. Может GPE.
rpm'ки из MeeGo я тоже хочу, я ж об этом написал в шапке.

Я хочу сказать, что если есть готовое окружение для сборки пакетов, то надо пользоваться им, а не придумывать еще одно. Проще пару пакетов в апстрим закинуть, чем из апстрима руками все копировать и мучаться с совместимостью (имена пакетов, имена библиотек и симлинков на них внутри пакета). Ведь все пакеты уже есть в OE, тебе достаточно будет сделать пакеты с ядром и модулями для диалера и прочих демонов. Вот я в упор не понимаю, зачем некоторые так угорают по LFS и пишут свою систему инициализации - это же огромные грабли при апдейтах.

Кстати. GPE мертво, и никто его не пилит. Сейчас основной гуй SHR - E17, альтернативный - Aurora на qt4. Мне самому не нравится openembedded, я хочу юзать убунту/генту, но мне лень делать пакеты для актуальной версии freesmartphone (потому что сначала надо портировать все на ванильное ядро, загнать в апстрим и портировать из старого андроидного ядра драйвер модема).

В общем, рекомендую разобраться сначала с тем, какой протокол модема используется, как настраивать alsa для каждого сценария (звонок/музыка/блютус), какие фирмвари нужны, а потом взять образ SHR для близкого девайса (например, с самсунговским модемом, типа nexus s) и добиться работы иксов, модема, звука. Потом подготовить патчи для freesmartphone.org и интегрировать их (советую посещать #openmoko-cdevel во freenode, там всегда помогут с интеграцией и расскажут, что и как работает). Строго говоря, если работа модема и телефонные функции не интересны, можно забить на это все и использовать обычный "десктопный" дистрибутив.

В общем, я думаю, что внимание надо заострять на том, как собирать ядро, как портировать драйвера между версиями и как управлять железом (модем, wifi) из юзерспейса, какие есть демоны для телефонной периферии (сенсоры освещенности, гироскоп, акселлерометр). А в качестве дистрибутива выбрать стандартный - ubuntu/fedora/meego/OE, чтобы была большая база собранных пакетов, и где есть сообщество, занимающееся подготовкой пакетов и исправлением багов.



Реп: (51)
Alex_DFR @ 23.01.2012, 18:00 *
Строго говоря, если работа модема и телефонные функции не интересны, можно забить на это все и использовать обычный "десктопный" дистрибутив.

Alex_DFR @ 23.01.2012, 18:00 *
А в качестве дистрибутива выбрать стандартный - ubuntu/fedora/meego/OE, чтобы была большая база собранных пакетов, и где есть сообщество, занимающееся подготовкой пакетов и исправлением багов.


Поддерживаю этот вариант! Но вот боюсь -WOLF- уже наметил для себя план действий и не хочется ему СОделиться... (что в общем понятно)
Очень надеюсь на кооперацию и выработку общей стратегии, иначе ждем "Linux для Spica 2" =)

Сообщение отредактировал reali - 23.01.12, 20:56



Реп: (793)
reali,
Я не против форков и других веток развития. Желательно, чтоб они имели совместимые пакеты и всё. Если будет выбор - это круто!
Предлагаю создать гибкую основу, на которую каждый из желающих мог бы нахлобучить всё, что захочет :) В этом и состоит мой "план".
Пока я буду пилить основу, потом X, потом GTK (GPE).
Можете подключаться и пилить основу под свой девайс, или позже пилить другой интерфейс.
Alex_DFR @ 23.01.2012, 17:29 *
надо драйвер opengl es 2.0

Я знаю, где можно его стырить. Хоть он и бинарный.



Реп: (51)
-WOLF- @ 24.01.2012, 18:07 *
Предлагаю создать гибкую основу, на которую каждый из желающих мог бы нахлобучить всё, что захочет

Думаю ни у кого не будет возражений! :yes2:



Реп: (51)
-WOLF-,
Скомпилировал ядро по твоей инструкции но возникли некоторые трудности:
- сначала вылезло
In file included from include/sound/soc.h:460:0,
from sound/soc/soc-core.c:34:
include/sound/soc-dai.h:224:25: error: duplicate member 'codec'
sound/soc/soc-core.c: In function 'snd_soc_init_card':
sound/soc/soc-core.c:1371:18: warning: variable 'ac97' set but not used [-Wunused-but-set-variable]
sound/soc/soc-core.c: At top level:
sound/soc/soc-core.c:969:12: warning: 'soc_shutdown' defined but not used [-Wunused-function]
make[2]: *** [sound/soc/soc-core.o] Error 1
make[1]: *** [sound/soc] Error 2
make: *** [sound] Error 2

поставил в конфиге "CONFIG_SOUND is not set" вроде пошло дальше..

- потом выскочило

WARNING: vmlinux.o(.data+0x2fb0): Section mismatch in reference from the variable spica_device_rfkill to the function .init.text:spica_rfkill_probe()
The variable spica_device_rfkill references
the function __init spica_rfkill_probe()
If the reference is valid then annotate the
variable with __init* (see linux/init.h) or name the variable:
*driver, *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console,

WARNING: vmlinux.o(.data+0x2ffc): Section mismatch in reference from the variable spica_device_btsleep to the function .init.text:spica_btsleep_probe()
The variable spica_device_btsleep references
the function __init spica_btsleep_probe()
If the reference is valid then annotate the
variable with __init* (see linux/init.h) or name the variable:
*driver, *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console,

drivers/built-in.o: In function `s3c_audio_off':
/home/***/kernel/drivers/power/s3c6410_battery.c:1673: undefined reference to `amp_enable'
/home/***/kernel/drivers/power/s3c6410_battery.c:1674: undefined reference to `audio_power'
make: *** [.tmp_vmlinux1] Error 1

прошло только после ещё одного вмешательства в конфиг "CONFIG_BATTERY_S3C6410 is not set"

После этого компиляция закончилась и создался "zImage".

Вот не знаю может изменил что-то критическое без чего ничего не заведеться..

зы повторил сборку раза 3 и все тоже самое...

Сообщение отредактировал reali - 25.01.12, 19:42



Реп: (793)
reali,
Была ошибка с "codec". Когда я попытался собрать ядро на другом ПК. На моём компе такая ошибка не возникает. К сожаленю, если отключить поддержку звуковухи, то ошибка возникает в управлении электропитанием. В Самсунге не расчитывали на использование ядра без поддержки звука.
Спасибо за багрепорт, я думал, что это просто тулчейн криво настроен. Если ещё не стёр копию исходников с того компа - разберусь в причине.
Вроде это не весь лог ошибки, начало немного выше



Реп: (793)
reali,
/* DAI runtime info */
struct snd_pcm_runtime *runtime;
//struct snd_soc_codec *codec;
unsigned int active;

в include/sound/soc-dai.h
Работоспособность не гарантирую, но ядро собирается.



Реп: (51)
-WOLF- @ 26.01.2012, 15:50 *
Работоспособность не гарантирую, но ядро собирается.

Сейчас попробую и отпишусь.

Как там кстати процесс?



Реп: (793)
reali,
Я, обычно, на выходных пилю.



Реп: (51)
-WOLF-,
Да, действительно, после этих изменений ядро успешно собралось.

-WOLF- @ 26.01.2012, 21:25 *
Я, обычно, на выходных пилю

понятно! что ж, ждем выходных и новых продвижений =)



Реп: (5)
надо бы потом и видео обзорчик запилить))


Полная версия   Текстовая версия

Помощь   Правила

Сейчас: 29.03.24, 03:45