The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Запуск 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:
Обсуждается: http://www.opennet.me/tips/info/3226.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, [email protected] (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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