- PVSM.RU - https://www.pvsm.ru -
Приобрел я себе планшет на SoC Allwinner A10 (sun4i — кодовое название процессора AllWinner A10 ARMv7-A архитектуры семейства Cortex ядро A8). Сначала игрался с ним на Android 2.x потом на 4.x, но со временем мне стало этого мало. Да еще начали выпускать миникомпьютеры на основе этой SoC с Linux на борту. Я подумал: «Хм, а чем мой планшет хуже?» и занялся делом. Как оказалось, за меня уже все сделали, и дела делать не пришлось:
Осталось только все это дело сконфигурирован и собрать.
Система — ArchLinux x86-64. Где найти и как устанавливать окружение для сборки описывать не буду, в интернете и так достаточно этой информации. Да и большинству это не зачем, я прикладу все необходимое собранным.«Кухня» у меня такая:
Т.е. Загрузка начинается с SD карты, если там нету загрузчика, продолжается с NAND Flash.Согласно документации к загрузчику allwinner-uboot [6] структура SD карты должна выглядеть таким образом:
| начало | размер | описание |
| 0 | 8KB | Unused, available for partition table etc. |
| 8 | 24KB | Initial SPL loader |
| 32 | 512KB | u-boot |
| 544 | 128KB | environment |
| 672 | 352KB | reserved |
| 1024 | Free for partitions |
Собирать не обязательно, sun4i-spl.bin u-boot.bin можно скачать здесь [7].
git clone git://github.com/hno/uboot-allwinner
cd uboot-allwinner
make sun4i CROSS_COMPILE=arm-none-linux-gnueabi-
cd ..
Внимание, будьте осторожны, не перепутайте устройство SD карты с другими носителями. Если вы не понимаете того, что делаете, то лучше не делайте.${SD} — переменная устройства, можно заменять вручную, можно перед выполнением прописать:
export SD=/dev/sdb
#Копируем SPL (boot0) первичный загрузчик на SD
dd if=uboot-allwinner/spl/sun4i-spl.bin of=${SD} bs=1024 seek=8 conv=notrunc
#Записываем вторичный (boot1) u-boot загрузчик на SD
dd if=uboot-allwinner/u-boot.bin of=${SD} bs=1024 seek=32 conv=notrunc
Внимание, в результате операции данные на MicroSD накопители будут утеряны, сохраните все необходимое в надежное место.
Вот, как я разбил свою 16GB карточку:
fdisk -l /dev/sdb
Disk /dev/sdb: 15.9 GB, 15935209472 bytes
64 heads, 32 sectors/track, 15197 cylinders, всего 31123456 секторов
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: 0x000728ca
Устр-во Загр Начало Конец Блоки Id Система
/dev/sdb1 2048 34815 16384 83 Linux
/dev/sdb2 34816 6326271 3145728 83 Linux
/dev/sdb3 6326272 31123455 12398592 83 Linux
Согласно пунктам, описанным выше, разбиваем MicroSD накопитель.Я, надеюсь, те, кто пользуется linux, умеет использовать fdisk.
fdisk ${SD}
mkfs.vfat ${SD}1 -n sun4i-boot
mkfs.ext4 ${SD}2 -L sun4i-rootfs
Монтируем в нужное место:
mkdir /mnt/sun4i-boot
mkdir /mnt/sun4i-rootfs
mount ${SD}1 /mnt/sun4i-boot
mount ${SD}2 /mnt/sun4i-rootfs
Ядро можно не компилировать, я приложил снизу готовое ядро с модулями.
#Клонируем репозиторий
git clone git://github.com/amery/linux-allwinner.git
#Сборка ядра
cd linux-allwinner
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- sun4i_defconfig
#Конфигуриуем ядро
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- gconfig
Вместо gconfig можно использовать на вкус xconfig(qt интерфейс) или menuconfig (консольный интерфейс). Не забываем включить необходимые драйвера в ядро а также необходимые вам фичи. Читайте подсказки к параметрам.Советую не забыть про модули тачскрина и фс(fat, ntfs).
#Компилируем
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage modules
#Устанавливаем модули
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- INSTALL_MOD_PATH=/mnt/sun4i-rootfs
#Ядро копируем в boot раздел
cp arch/arm/boot/uImage /mnt/sun4i-boot
Как загружать с помощью debootstrap [8] начальную rootfs описывать не буду, так как это достойно еще одной статьи. Я лучше прикладу готовую rootfs Debian Wheezy ARMHF, а вы пользуйтесь. Rootfs необходимо распаковать с сохранением атрибутов на второй раздел SD, так как таким образом сконфигурирован по умолчанию u-boot (про конфигурациию можно почитать здесь [6]. Качаем Debian Wheezy Rootfs [9] и распаковываем:
tar -xpf debian-wheezy-armhf-rootfs.img.tar.bz2 -C /mnt/sun4i-boot
Кстати, здесь есть и модули к ядру 3.0.36+. Также имеется lxde, slim с автозагрузкой пользователя user, network-manager, nm-applet стартует при старте сессии. Можно отредактировать /mnt/sun4i-rootfs/etc/modules.Есть вероятность, что все необходимые модули подгрузит udev, но для уверенности их можно туда прописать. Список необходимых модулей можно получить в AndroidOS через TerminalEmulator либо через ADB:
adb shell lsmod
Качаем архив [10] с содержимым первого boot раздела.И извлекаем файл конфигурации evb.bin в /mnt/sun4i-boot из архива.
tar -xf debian-wheezy-armhf-boot.tar.bz2 evb.bin -C /mnt/sun4i-boot
Если вы не собирали ядро, то собранное ядро 3.0.36+ можно тоже извлечь:
tar -xf debian-wheezy-armhf-boot.tar.bz2 uImage -C /mnt/sun4i-boot
Все, пожалуй, готово. Мы установили систему на SD накопитель. Вставляем MicroSD карточку в картоприемник планшета и включаем его. Через 5 сек после включения должна засветиться подсветка, экран останется черным. Через несколько миинут должна загрузиться вся система.Помните, пароль по умолчанию для root — root, для user — user. Советую изменить их.Если у вас нет usb клавиатуры, то в rootfs предустановлена виртуальная клавиатура.Подключаемся к wifi сети, или используем USB Ethernet адаптер и с помощью nm-applet подключаемся к сети. Сразу же можно подключиться через ssh.Запускаем lxterminal и доставляем необходимый софт.
sudo -i
apt-get update
apt-get install vlc geany
adb shell
su
mkdir /local/data/tmp/nanda
mount /dev/block/nanda /local/data/tmp/nanda
Извлекаем любыми путями script.bin, я делал так:$ adb pull /local/data/tmp/nanda/script.bin evb.bin
cp evb.bin /mnt/sun4i-boot/
cat /mnt/sun4i-rootfs/var/log/dmesg
cat /mnt/sun4i-rootfs/var/log/Xorg.0.log
adb shell 'lsmod | grep ts'
и прописать его /mnt/sun4i-rootfs/etc/modules.
Таким образом я запустил linux на своем планшете MOMO9. Система пока не настроена до конца, не мешало бы настроить тот-же laptop-mode и доставить необходимые пакеты. Времени было потрачены не мало. Но зато, собрав так систему «почти» с нуля, сразу начинаешь понимать, как работает данная ОС. Еще пополняется словарный запас специальной английской лексики, что тоже не плохо.И конечно же, я не несу никакой ответственности за то, что вы натворите у себя на ПК, за порчу оборудования. Делайте все с пониманием дела. Не перепутайте устройство SD ридера с винчестером либо другим устройством.
Автор: denis4inet
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/13158
Ссылки в тексте:
[1] Ядро: https://github.com/amery/linux-allwinner
[2] Загрузчик: https://github.com/hno/uboot-allwinner
[3] debian armhf: http://wiki.debian.org/ArmHardFloatPort/
[4] qemu-user-static : http://packages.debian.org/sid/qemu-user-static
[5] Sourcery CodeBench Lite: http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/
[6] документации к загрузчику allwinner-uboot: https://github.com/hno/uboot-allwinner/wiki
[7] здесь: http://narod.ru/disk/59195486001.8115b0bd5336737b542ced50986e1fea/uboot-spl.tar.bz2.html.
[8] debootstrap: http://wiki.debian.org/Debootstrap
[9] Debian Wheezy Rootfs: http://narod.ru/disk/59191784001.4e6748d3ae5218f2bb326d262a32893a/debian-wheezy-armhf-rootfs.img.tar.bz2.html
[10] архив: http://narod.ru/disk/59188122001.dedcfd0cc567def813ff0d9605a8c782/debian-wheezy-armhf-boot.tar.bz2.html
Нажмите здесь для печати.