The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Раздел полезных советов: Запуск Linux на Android-телефоне с SD-карты без перепрошивки"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Запуск Linux на Android-телефоне с SD-карты без перепрошивки"  +/
Сообщение от auto_tips (??), 10-Авг-23, 13:22 
В данной заметке рассказано как запустить ванильный Debian Linux на телефоне не прошивая его и не портя установленный Android.
Мой подопытный аппарат Xiaomi Redmi note 11. Телефон не нужно рутовать,  достаточно разблокировать загрузчик. Запускать будем с помощью fastboot (да для каждого запуска потребуется подключать телефон к компьютеру), а рутовую файловую систему будем подцеплять с SD-карты.

++ Настройка среды

Создадим рабочий каталог:

   mkdir ~/redmi11
   cd ~/redmi11/


Скачаем нужное ПО:

   sudo apt install qemu-user-static
   sudo apt build-dep linux-source
   git clone https://android.googlesource.com/platform/system/tools/mkboo...
   git clone https://android.googlesource.com/platform/prebuilts/gcc/linu...
   cd aarch64-linux-android-4.9
   git switch android-msm-barbet-4.19-android12-qpr1
   cd ~/redmi11/

, так же https://developer.android.com/tools/releases/platform-tools в каталог ./platform-tools.

Пропишем для удобства работы пути в ./path.sh:

   export PATH=$PATH:$(pwd)/mkbootimg:$(pwd)/platform-tools

Подключим пути в текущий bash:

   . path.sh


++ Ядро

В ядре, которое идёт в составе Android, выключены некоторые важные подсистемы, поэтому загрузиться с ним по-простому не получится и надо компилировать свою версию.

Надо найти исходники ядра для своего телефона, для Xiaomi с этим почти нет проблем.

   git clone https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git
   cd Xiaomi_Kernel_OpenSource/
   git switch spes-r-oss

Для моей версии отсутствовал каталог techpack, он должен был быть, и ядро не собиралось до конца. Я нашёл techpack в аналогичной версии исходников на GitHub. Надо сказать, что исходники ядра Xiaomi имеют много мелких ошибок, связанных с включением "" <> хидеров и прочего. Я их все муторно правил, пока не добился компиляции без ошибок.
Получим конфиг ядра с телефона, для этого подключим его к компьютеру и выполним:

   adb shell zcat /proc/config.gz > .config

Сделаем два скрипта - для конфигурации ядра и для компиляции.
./menuconfig.sh:


   PATH="$PATH:$HOME/redmi11/aarch64-linux-android-4.9/bin"
   ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- make menuconfig

./build.sh:

   PATH="$PATH:$HOME/redmi11/aarch64-linux-android-4.9/bin"
   ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- make -j 8 targz-pkg

Теперь изменим кофигурацию ядра и скомпилируем его. Во-первых в нем отключена поддержка devtmpfs, включим её

   CONFIG_DEVTMPFS=y

Включим виртуальные консоли:

   CONFIG_TTY=y
   CONFIG_VT=y
   CONFIG_CONSOLE_TRANSLATIONS=y
   CONFIG_VT_CONSOLE=y

Фрэймбуфер:

   CONFIG_DRM_FBDEV_EMULATION=y
   CONFIG_FRAMEBUFFER_CONSOLE=y

Чтобы консоль не заваливало сообщениями ядра:

  CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4
  CONFIG_CONSOLE_LOGLEVEL_QUIET=3
  CONFIG_MESSAGE_LOGLEVEL_DEFAULT=3


++ ROOT файловая система
Используем debootstrap для получения файловой системы:

   cd ~/redmi11/
   mkdir rootfs
   sudo debootstrap --arch=arm64 stable ./rootfs http://mirror.yandex.ru/debian
   sudo chroot rootfs/ tasksel install gnome-desktop

Скопируем полученное ядро в ./rootfs/boot и модули если есть в ./rootfs/lib/modules.

Отредактируем ./rootfs/etc/fstab:

   LABEL=debian    /    ext4    rw,defaults,noatime,nodiratime    0 1
tmpfs /tmp tmpfs rw,nosuid,nodev,noexec,mode=1777

Создадим initrd:

   sudo chroot rootfs/ apt install initramfs-tools
   sudo mount --bind /dev rootfs/dev
   sudo chroot rootfs/ update-initramfs -k all -c
   sudo umount rootfs/dev

Теперь для удобства сделаем образ нашей файловой системы, для этого используем скрипт install.sh:

   #!/bin/sh

   mkdir -p mnt
   dd if=/dev/zero of=debian-arm64.ext4 bs=4096 count=2097152 #8Gb
/sbin/mkfs.ext4 -L debian -O^has_journal debian-arm64.ext4
   sudo mount -o loop debian-arm64.ext4 ./mnt
   sudo cp -ar ./rootfs/* ./mnt/
   sudo umount ./mnt

На SD карточке у меня два раздела - первый FAT32, и второй под Linux. Запишем образ на SD карточку:

   sudo dd if=debian-arm64.ext4 of=/dev/YourSD2 bs=512 status=progress
   sudo partprobe
   sudo resize2fs /dev/YourSD2


++ Запуск

Для запуска нам нужно подготовить Android boot image, используем скрипт mkbootimg.sh:

   mkbootimg.py \
   --header_version 3 \
   --os_version 12.0.0 \
   --os_patch_level 2023-04 \
   --kernel ./rootfs/boot/vmlinuz-4.19.157-tiny \
   --ramdisk ./rootfs/boot/initrd.img-4.19.157-tiny \
   --cmdline 'console=tty0 quiet root=LABEL=debian rootwait' \
   --board '' \
   -o boot-debian.img


Здесь мы запускаем ядро с rootfs с меткой "debian", как мы и делали образ файловой системы.

Теперь собственно запуск. Подключим телефон к компьютеру и выполним (не бойтесь ничего не записывается на него):

   adb reboot bootloader
   fastboot boot boot-debian.img


P.S. А с драйверами я не разобрался.


URL:
Обсуждается: https://www.opennet.ru/tips/info/3226.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Аноним (-), 10-Авг-23, 13:22   +1 +/
1) Разблокировка бутлоадера доступна не для всех телефонов. Мягко говоря.
2) Вместо кача mkbootimage хзоткуда можно просто установить пакет "abootimg". Мелкий, никаких питонов и клонов хзоткуда не надо, есть в дебианах и убунтах. Можно и чужой bootimg распаковать и свой сделать.
3) Ребилд вендорского ядра это хардкор во все поля...
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #8

2. Сообщение от Аноним (2), 10-Авг-23, 14:04   +6 +/
Какой-то бессмысленный ад.

Потратить тучу времени, чтобы загрузиться в то, что практически не работает: "драйверами я не разобрался"?

Зачем?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #9, #17

3. Сообщение от Аноним (3), 10-Авг-23, 17:30   +2 +/
Самый гланый вопрос, ВОПРОСИЩЕ: звонить и СМС из Debian возможно?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #6

4. Сообщение от 34 (?), 11-Авг-23, 00:57   –1 +/
> P.S. А с драйверами я не разобрался.

А почему не использовать штатное ядро со штатными драйверами?

И, мне кажется, это лучше оформить ввиде docker или flatpak

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #7

5. Сообщение от Андроид (?), 11-Авг-23, 12:02   +/
Поясните пожалуста манипуляцию с разделом СД карты, вы его просто перезаписали ?
Ответить | Правка | Наверх | Cообщить модератору

6. Сообщение от Павел Отредиез (ok), 11-Авг-23, 15:37   –2 +/
Возможно, при наличии драйверов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #16

7. Сообщение от Павел Отредиез (ok), 11-Авг-23, 15:40   +/
>> P.S. А с драйверами я не разобрался.
> А почему не использовать штатное ядро со штатными драйверами?

Ты имеешь ввиду мэинлайн ядро? На моем xiaomi не прокатывает -  черный экран.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #13

8. Сообщение от Павел Отредиез (ok), 11-Авг-23, 15:50   +/
А как без ребилда ядра? Андроидовское не катит - нет devtmpfs и vts. И Xы и Wayland требуют виртуальную консоль, так фиг запустишь.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

9. Сообщение от Павел Отредиез (ok), 11-Авг-23, 15:55   +2 +/

> Зачем?

Просто все думают, что надо что то прошивать для "Linux на телефоне", а можно ничего не портить.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #10

10. Сообщение от Мимокрокодил (?), 11-Авг-23, 16:59   +/
К вопросу "зачем"
На этом этапе экспериментов usb-сетевухи и сенсорный экран уже работают или ещё нет?
Собрать сетевой анализатор для проверки dhcp, доступности адресов и т.п. можно?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #11

11. Сообщение от Павел Отредиез (ok), 11-Авг-23, 19:23   +/
> К вопросу "зачем"
> На этом этапе экспериментов usb-сетевухи и сенсорный экран уже работают или ещё
> нет?
> Собрать сетевой анализатор для проверки dhcp, доступности адресов и т.п. можно?

Это работает, USB сетевухи заработают, USB gadget ETH работает.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

12. Сообщение от Аноним (-), 12-Авг-23, 05:13    Скрыто ботом-модератором+1 +/
Ответить | Правка | Наверх | Cообщить модератору

13. Сообщение от 34 (?), 12-Авг-23, 10:15   +/
штатное ядро из штатной прошивки
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #14

14. Сообщение от Павел Отредиез (ok), 12-Авг-23, 23:26   +/
Не получится с ним, и постмаркет перекомпилирует с другими параметрами...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13

15. Сообщение от анон (?), 18-Авг-23, 19:46   +1 +/
Спасибо, чувак. Ищу такие решения.
Ответить | Правка | Наверх | Cообщить модератору

16. Сообщение от anonymous (??), 19-Авг-23, 16:21   –2 +/
Т.е. нет.
Невозможно. Драйверов не завязанных на андроидный юзерспейс для этого нет и не будет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #24

17. Сообщение от Аноним (17), 20-Авг-23, 01:46   +6 +/
> Какой-то бессмысленный ад.
> Потратить тучу времени, чтобы загрузиться в то, что практически не работает: "драйверами я не разобрался"?
> Зачем?

Посмотри как живёт наука, медицина, исследования.

Каждая статья о чём-то небольшом. Каждый отдельно делает небольшую работу. Со временем несколько разных статей позволяют сделать какую-то большую вещь.

P.S. А Андроид, увы, убил идею КПК - карманного персонального компьютера. Из-за чего такие статьи очень ценны, и без драйверов тоже.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2

18. Сообщение от Gefest (?), 23-Авг-23, 21:46   +/
Wifi работает ?? Если да , то смартфон можно хоть как домашний сервер гонять хотя бы  .Если нет  ....
Ответить | Правка | Наверх | Cообщить модератору

20. Сообщение от Пряник (?), 29-Авг-23, 09:42   +/
Извечная проблема с драйверами в Linux.
Ответить | Правка | Наверх | Cообщить модератору

24. Сообщение от Аноним (24), 11-Окт-23, 18:38   +/
зачем вам звонить с линукса ?
гораздо полезней вайфай поднять или просто возможность использовать как мини-компьютер для игр там или для коддинга в отрыве от интернета
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16

25. Сообщение от erophey7 (?), 30-Июн-24, 18:23   +/
К сожалению не сработало. Устройство не грузится, чёрный экран. Пробовал:
1) в fstab и cmdline менять на другой путь к сд.
2) собирать initramfs на целевом устройстве (так как с пк лог был таким:
update-initramfs -c -k all
update-initramfs: Generating /boot/initrd.img-5.4.242-9b433a4c
W: zstd compression (CONFIG_RD_ZSTD) not supported by kernel, using gzip
W: Possible missing firmware /lib/firmware/b43/ucode11.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode13.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode14.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode15.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode16_lp.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode16_mimo.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode24_lcn.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode25_lcn.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode25_mimo.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode26_mimo.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode29_mimo.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode33_lcn40.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode30_mimo.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode5.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode40.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode42.fw for built-in driver b43
W: Possible missing firmware /lib/firmware/b43/ucode9.fw for built-in driver b43
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault (core dumped)
).
3) кучу разных конфигураций ядра. Сами исходники нормальные и под моё устройство (собрал из них NethHunter ядро и пользуюсь)

Пробовал на Xiaomi 11 Lite 5G NE (Lisa) прошитом на PixelOS 14 QPR2

PS: у меня есть несколько предположений на счёт того почему у меня не получилось:
1)Я просто не дождался загрузки (хотя ждал по 10-15 мин).
2)second bootloader просто не понял что ему грузить, так как адреса kernel и ramdisk отличаются от стоковых.
3) картинка выводилась не в tty0
4) Не подходящая версия mkbootimg
5) фазы луны не совпали (самое вероятное)

Ответить | Правка | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру