В Wiki проекта свободной операционной системы Debian GNU/Linux появилась инструкция (пока только на английском языке) по установке этого дистрибутива на Open Source-смартфон проекта OpenmokoNeo FreeRunner.

Использование Debian GNU/Linux на Neo FreeRunner стало возможным благодаря интеграции, проведенной усилиями проекта FreeSmartphone.Org (FSO). После установки Debian на FreeRunner эта система позволяет делать и принимать телефонные звонки, читать и отправлять SMS, работать с телефонной книгой на SIM-карте и использовать GPS-навигацию.

В инструкции описана установка Debian на FreeRunner, настройка окружения uBoot, а также использование системы. Кроме того, представлены разделы, посвященные установке приложений FSO (FreeSmartphone.Org) и разработке приложений на Debian.

Почитать инструкцию можно здесь.

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

У.

Установка Ubuntu Jaunty на Nokia N800/N810

Дмитрий Халин любезно предоставил нам руководство по установке Ubuntu Jaunty на Nokia N800/N810.

Вступление

Предлагаю вашему вниманию перевод этой инструкции по установке Ubuntu Jaunty на Nokia N800/N810.
Что работает:

  • Dsme
  • Hal (частично)
  • Screen diming
  • Xserver-xorg
  • Простые эффекты Compiz
  • Управление питанием
  • Usbnet emergency talend
  • Powersave
  • Bluetooth
  • Right click
  • Беспроводная сеть
  • keymapping (аппаратные клавиши и виртуальная клавиатура)

Ubuntu Jaunty на Nokia N800/N810
Подробности под катом.
Что не работает:

  • Usplash (не запускается, возможно наше ядро его не поддерживает?)
  • Звук (закрытый исходный код)


Установочный процесс потребует наличия следующего:

  • easyroot / rootsh / becomeroot
  • debootstrap
  • базовые знания командной строки
  • e2fsprogs
  • 2-4Гб карта mmc — 4 Гб+ если вы планируете установить ubuntu-desktop.
  • Bootmenu form deblet
  • binutils

Шаг первый: подготовка карты памяти

Для этого выполним следующее в терминале под root’ом (Я использую 4GB mmc с 356мб fat16 разделом и 3.6гб для linux83 — нашим корневым разделом)

umount /dev/mmcblk0p1
sfdisk -uM /dev/mmcblk0
356,6
,,L
,,
,,

Шаг второй: форматирование разделов

umount /dev/mmcblk0p1
mkdosfs /dev/mmcblk0p1
mkfs.ext3 /dev/mmcblk0p2

Шаг третий: переход в свежеустанавливаемую систему

Создадим директорию, куда будем устанавливать систему:

mkdir -p /mnt/jaunty

Далее скачаем скрипт bootstrap-script.tar.gz, уберем симлинк

rm -f /usr/share/debootstrap/scripts/jaunty

и распакуем наш скрипт в /usr/share/debootstrap/scripts под пользователем root.

Далее мы должны добавить md5sum в наш /bin каталог для правильной работы debootstrap. Скачаем md5sum и распакуем в /bin под пользователем root.

Далее смонтируем наш ubuntu раздел в /mnt/jaunty и начнём установку(это может занять много времени):

insmod /mnt/initfs/lib/modules/`uname -r`/mbcache.ko
insmod /mnt/initfs/lib/modules/`uname -r`/ext2.ko
insmod /mnt/initfs/lib/modules/`uname -r`/jbd.ko
insmod /mnt/initfs/lib/modules/`uname -r`/ext3.ko
mount /dev/mmcblk0p2 /mnt/jaunty -o noatime
debootstrap --include="language-pack-en,language-pack-en-base,dmsetup,cryptsetup,hashalot,nano,sudo" --components=main,multiverse,universe,restricted --verbose --arch=armel jaunty /mnt/jaunty http://ports.ubuntu.com/ /usr/share/debootstrap/scripts/jaunty

И, наконец, chroot’имся в установленную систему и создаём устройства консоли:

mount /proc /mnt/jaunty/proc
mount /sys /mnt/jaunty/sys
chroot /mnt/jaunty
cd /dev; /sbin/MAKEDEV fb0 fb1 fb2 fb3 fb4 fb5 fb6 fb7
exit

Шаг четвертый: подготовка базовой системы к загрузке

Примонтируем нужные каталоги:

mount /dev /mnt/jaunty/dev
mount /dev/pts /mnt/jaunty/dev/pts
mount /tmp /mnt/jaunty/tmp
chroot /mnt/jaunty
export LC_ALL=C

Добавим пароль пользователя root:

passwd root

Настроим репозиторий, изменив файл /etc/apt/sorces.lst:

#Ubuntu jaunty alpha
deb http://ports.ubuntu.com jaunty main restricted universe multiverse
deb-src http://ports.ubuntu.com jaunty main restricted universe multiverse

#Mer alpha
deb http://repository.mer.tspre.org/ alpha contrib main non-free
deb-src http://repository.mer.tspre.org/ alpha contrib main non-free

#Deblet sid
deb http://packages.tspre.org/ sid main contrib non-free
deb-src http://packages.tspre.org/ sid main contrib non-free

#Ubuntu N8x0
deb http://www.bman.maemobox.org/repository alpha contrib main non-free
deb-src http://www.bman.maemobox.org/repository alpha contrib main non-free
Далее настроим apt-get:
touch /etc/apt/preferences

Добавим следующее в /etc/apt/preferences:

Package: *
Pin: release a=jaunty
Pin-Priority: 900

Package: *
Pin: release a=alpha
Pin-Priority: 340

Package: *
Pin: release a=sid
Pin-Priority: 300
Установим базовую систему:
wget http://packages.tspre.org/repo.key
apt-key add repo.key
apt-get update
apt-get -t alpha install cx3110x-module cx3110x-umac-module ke-recv-l10n-public kernel-diablo-modules-fbcon kernel-diablo mce-dummy nokia-n8x0-firmware nokia-tablets-pointercal omap-fb-console omap-fb-tools usbnet-emergency-telnetd utelnetd xresponse-visualize tablet-wireless xserver-xorg-video-omapfb synaptic aptitude console-tools
apt-get install ubuntu-rescue-menu ubuntu-omap-fb-splash nit-bootmenu-compat
apt-get install xserver-xorg-input-tslib=0.0.5-1mer7
apt-get remove xserver-xorg-input-all xserver-xorg-input-synaptics

Установим файл boottime.kmap.gz для работы клавиатуры:

cp /path/to/boottime.kmap.gz /mnt/jaunty/etc/

Далее отредактируем ряд файлов:
/etc/X11/xorg.conf

# xorg.conf (X.Org X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the xorg.conf manual page.
# (Type "man xorg.conf" at the shell prompt.)
#
# This file is automatically updated on xserver-xorg package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xorg
# package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command:
# sudo dpkg-reconfigure -phigh xserver-xorg

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "pc104"
Option "XkbLayout" "us"
EndSection

Section "InputDevice"
Identifier "tslib"
Driver "tslib"
Option "ScreenNumber" "0"
Option "Width" "800"
Option "Height" "480"
Option "Rotate" "NONE"
Option "TslibDevice" "/dev/input/event3"
Option "CorePointer"
EndSection

Section "Device"
Identifier "Configured Video Device"
# Option "UseFBDev" "true"
Driver "omapfb"
Option "fb" "/dev/fb0"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
EndSection

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
EndSection

/etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/sbin/fb_update_mode auto
exit 0

/etc/fstab

rootfs / rootfs defaults,errors=remount-ro,noatime,nodiratime 0 1
proc /proc proc defaults 0 0
/dev/mtdblock4 /mnt/rootfs jffs2 defaults 0 0
/dev/mmcblk0p1 swap swap defaults 0 0
/dev/mmcblk1p1 /media/mmc1 vfat defaults 0 0

/etc/X11/Xwrapper.config

# Xwrapper.config (Debian X Window System server wrapper configuration file)
#
# This file was generated by the post-installation script of the x11-common
# package using values from the debconf database.
#
# See the Xwrapper.config(5) manual page for more information.
#
# This file is automatically updated on upgrades of the x11-common package
# *only* if it has not been modified since the last upgrade of that package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command as root:
# dpkg-reconfigure x11-common
allowed_users=anybody
nice_value=-1

В файле /etc/init.d/hwclock.sh HWCLOCKPARS= изменим на HWCLOCKPARS="--directisa" и добавим это в /etc/default/rcS:

echo 'HWCLOCKPARS=--directisa' << /etc/default/rcS
&#91;/sourcecode&#93;
Уменьшим время загрузки:
&#91;sourcecode language="js"&#93;
apt-get install insserv
echo 'CONCURRENCY=shell' << /etc/default/rcS
&#91;/sourcecode&#93;
Если вы не заинтересованы в установке ubuntu-desktop то можете выполнить следующее и сразу перейти к шагу 7.
&#91;sourcecode language="js"&#93;
exit
exit
umount /mnt/jaunty/dev/pts
umount /mnt/jaunty/dev
umount /mnt/jaunty/proc
umount /mnt/jaunty/sys
umount /mnt/jaunty/tmp
fuser -m /mnt/jaunty -k
umount /mnt/jaunty
&#91;/sourcecode&#93;
<h4>Шаг пятый: установка ubuntu-desktop</h4>
Выполните следующее в терминале, это может занять несколько часов:

apt-get install ubuntu-desktop matchbox-keyboard
apt-get clean

Поправим файл /etc/gdm/gdm.conf-costom для автоматического логина:

[daemon]
# Automatic login, if true the first attached screen will automatically logged
# in as user as set with AutomaticLogin key.
AutomaticLoginEnable=true
AutomaticLogin=user

Шаг шестой: активация файла подкачки

Выполним следующее в терминале:

mkswap /dev/mmcblk1p3

Добавим в /etc/fstab следующую строку:

/dev/mmcblk1p3 swap swap defaults 0 0

Шаг седьмой: создание меню загрузки

Создайте файл /etc/bootmenu.d/ubuntu.item и добавьте туда следующее(в случае раздела Ubuntu в /dev/mmcblk0p2):

ITEM_NAME="Ubuntu on mmcblk0p2"
ITEM_ID="Ubuntu on mmcblk0p2"
ITEM_DEVICE="mmcblk0p2"
ITEM_MODULES="mbcache jbd ext3"
ITEM_FSTYPE="ext3"
ITEM_FSOPTIONS="noatime,ro"
ITEM_LINUXRC="linuxrc"

И выполните следующую команду в терминале:

refresh_bootmenu.d

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

Оригинал статьи находится здесь.

С.

Собираем собственный дистрибутив Embedded Linux на базе OpenEmbedded

Администратор сайта OpenEmbedded.ru любезно предоставил интереснейшую статью о том, как собрать свой собственный дистрибутив Embedded Linux на базе OpenEmbedded. Судя по качеству материала, проект OpenEmbedded.ru может быть очень интересен разработчикам, использующим Embedded Linux для построения решений. Статья под катом, читаем!

Практически у всех программистов первой программой была Hello, world! Она говорила – Здравствуй, мир! и завершалась. Первый дистрибутив на базе OpenEmbedded будет делать то же самое. Но для этого придется немного попотеть, потребуется следующее:

  • Компьютер с установленным дистрибутивом Linux Ubuntu.
  • Желание установить и умение читать.
  • Интернет канал, желательно безлимитный.

Если у вас есть все требуемое, запускайте терминал. Для начала запустим установку необходимых программного обеспечения:

sudo apt-get install make gcc g++ ccache sed wget cvs \
subversion git-core git coreutils unzip texi2html texinfo \
libsdl1.2-dev docbook-utils gawk python-pysqlite2 \
diffstat help2man libxml2-utils xmlto \
python-psyco

В случае если у вас достаточно быстрый интернет, то установка займет где-то полчаса. Если же нет, то это отнимет больше времеи.

Как только все программы установятся, cоздаем каталог для опытов и переходим в нее:

exit
mkdir -p ~/stuff/build/conf
cd ~/stuff

Далее установливаем bitbake. Для этого с сайта bitbake скачиваем и распаковываем последний релиз:

wget http://download.berlios.de/bitbake/bitbake-1.8.12.tar.gz
tar -xzvf bitbake-1.8.12.tar.gz
mv bitbake-1.8.12 bitbake

Следующим шагом идет получение репозитория OpenEmbedded. Для его получения запускаем:

git clone git://git.openembedded.net/openembedded

Если вдруг доступен только http (злые админы закрыли интернеты) то пробуем получить его через http:

git clone http://repo.or.cz/r/openembedded.git

Note:

В дальнейшем для обновления репозитария будет достаточно перейти в каталог stuff/openembedded:

cd ~/stuff/openembedded
git pull

Учтите, репозиторий довольно большой, так что качается довольно долго. Когда он скачается, необходимо создать конфигурационный файл сборки. Воспользуемся примером из репозитория:

cd ~/stuff/
cp openembedded/conf/local.conf.sample build/conf/local.conf

Далее откройте файл в редакторе и измените значения следующих переменных:

BBFILES = "${HOME}/stuff/openembedded/packages/*/*.bb"
DL_DIR = "${HOME}/stuff/sources"
DISTRO = "angstrom-2008.1"
MACHINE = "x86"

А в конце файла удалите строку:

REMOVE_THIS_LINE

сохраните файл.
Теперь необходимо настроить окружение. Сначала указываем где у нас находится bitbake

export PATH=${PATH}:${HOME}/stuff/bitbake/bin

затем указываем bitbake где искать репозиторий и файл конфигурации

export BBPATH=${HOME}/stuff/build:${HOME}/stuff/openembedded

И наконец запускаем сборку hello world:

bitbake helloworld-image

Если в результате запуска появилось нечто такое:

NOTE: Handling BitBake files: / (6291/6291) [100 %]
NOTE: Parsing finished. 6027 cached, 0 parsed, 264 skipped, 0 masked.
NOTE: build 200812252310: started

OE Build Configuration:
BB_VERSION        = "1.8.10"
METADATA_BRANCH   = "org.openembedded.dev"
METADATA_REVISION = "5b1ed09b1ab1a60a28a76e4658bc9957cd361b5d"
TARGET_ARCH       = "i486"
TARGET_OS         = "linux"
MACHINE           = "x86"
DISTRO            = "angstrom"
DISTRO_VERSION    = "2008.1-test-20081225"
TARGET_FPU        = ""

NOTE: Resolving any missing task queue dependencies
NOTE: Preparing runqueue
NOTE: Executing runqueue

то можете себя поздравить, bitbake и openembedded установленны правильно. Вам осталось подождать пока bitbake соберет все что необходимо.

Итак, сборка helloworld-image завершена. В результате при помощи OpenEmbedded был собран helloworld и создан образ корневой файловой системы вместе с ним. Осталось только все это запустить, это довольно просто. Для начала устанавливаем Virtual Box:

sudo apt-get install virtualbox

Затем потребуется собрать модуль для virtualbox (возможно, вам не потребуется собирать модуль, так-как в исходных кодах он стал устанавливаться недавно)

sudo apt-get install module-assistant
sudo m-a prepare
sudo m-a a-i virtualbox-ose

и загрузить его

sudo modprobe vboxdrv

Note

Команда sudo m-a a-i virtualbox-ose может сообщить об неудачном завершении. Но на самом деле все что необходимо она выполнила. Если при этом у вас команда sudo modprobe vboxdrv не вывела никаких ошибок при выполнении, то значит все в порядке.

Затем добавляем его в автозагрузку. Для этого открываем /etc/modules и добавляем туда:

vboxdrv

после чего сохраняем. Теперь при каждой загрузке этот модуль будет подгружаться сам. Осталось добавить себя в группу пользователей vboxusers, чтобы можно было работать с Virtualbox:

sudo adduser [your username] vboxusers

Note

Для вступления в силу изменений потребуется завершить сеанс и войти заново.

Теперь пробуем запустить Virtualbox (у меня находится в разделе стандартные). Если вы увидите нечто такое:

OpenEmbedded в VirtualBox

то значит, что virtualbox работаем и можно приступать к созданию виртуальной машины, если нет то необходимо разобраться, что у вас не так.

Для создания новой виртуальной машины нажимаем создать, далее в качестве имени вводим openembedded (на самом деле имя может быть любым, главное чтобы оно не содержало пробелов), в тип ОС указываем Linux 2.6, жмем далее до запроса о виртуальном диске. Тут так же жмем далее, когда выскакивает предупреждение о том, что у нас нет дисков, нажимайте продолжить пока они не потребуются. После этого выведется итог, там жмем готово.
В списках виртуальных машин должна появиться машина openembedded. Выделяем ее и жмем свойства, там выбираем пункт Общие и переключаемся с закладки Основные на закладку Дополнительно. Там меняем порядок загрузки таким образом, чтобы Сеть была включена и была в списке первой. Если что-то не понятно сверьтесь:

openembedded-create-virtualbox-machine

Если вы выполнили все верно, то виртуальная машина настроена. Теперь необходимо добавить загрузчик, собрать ядро, установить и настроить NFS сервер. Начем с загрузчика.

В качестве загрузчика будет использоваться pxelinux из состава syslinux. Устанавливаем его:

sudo apt-get install syslinux

Нужный нам файл pxelinux.0 находится в каталоге /usr/lib/syslinux. Для его установки переходим в каталог ~/.VirtualBox, создаем нем каталог TFTP и копируем туда pxelinux.0:

cd ~/.VirtualBox
mkdir TFTP
cp /usr/lib/syslinux/pxelinux.0 TFTP/openembedded.pxe

Note

Такое странное имя выбрано не спроста. Если вы вспомните называлась виртуальная машина, то заметите что оно совпадает с ее именем. Это необходимо из-за того что VirtualBox обладает встроенными средствами автоконфигурации и загрузки по сети. Для того чтобы он нашел загрузчик, он должен называться имя машины.pxe.

Теперь можно попробовать включить виртуальную машину. Выберите ее в списке и нажмите старт. Если в результате вывелось что-то похожее

OpenEmbedded в VirtualBox

значит VirtualBox нашел загрузчик и передал ему управление. Выключаем вируальную машину и переходим к сборке ядра. Для этого потребуется изменить локальную конфигурацию и один из файлов репозитория. Начнем с файла локальной конфигурации local.conf. Добавляем в него строку следующего вида:

FILESPATH =. "${TOPDIR}/conf/packages/${PN}/${MACHINE}:"

Затем изменяем файл base.bbclass. Он находится в каталоге ~/stuff/openembedded/classes. Открывываем его, ищем строку начинающуюся с:

FILESPATH

удаляем.

Note

Эти действия необходимы для того чтобы конфигурация ядра бралась не из репозитория, а из определенного конфигурацией каталога.

Создаем каталог в котором будет находится файл конфигурации ядра:

mkdir -p ~/stuff/build/conf/packages/linux/x86

Выкачиваем его:

cd ~/stuff/build/conf/packages/linux/x86
wget http://openembedded.ru/wp-content/uploads/2009/01/defconfig

Далее собираем ядро. Для этого переходим в каталог ~/stuff/build и запускаем сборку ядра:

cd ~/stuff/build
export BBPATH="$HOME/stuff/build:$HOME/stuff/openembedded"
bitbake virtual/kernel

Сборка займет где-то полчаса-час в зависимости от мощности вашего компьютера. После ее завершения потребуется скопировать ядро в каталог ~/.VirtualBox/TFT, чтобы его смог найти загрузчик. Далее настроить загрузчик, так чтобы он грузил ядро и настроить NFS сервер, чтобы ядро смогло подключить корневую файловую систему. Начнем с ядра.

Ядро находится в каталоге ~/stuff/build/tmp/deploy/glibc/images/x86 и называется bzImage-x86.bin. Копируем его в ~/.VirtualBox/TFTP:

cd ~/.VirtualBox/TFTP
cp ~/stuff/build/tmp/deploy/glibc/images/x86/bzImage-x86.bin bzImage

Переходим к настройке загрузчика. Создаем каталог pxelinux.cfg (в нем загрузчик ищет файлы конфигурации):

mkdir ~/.VirtualBox/TFTP/pxelinux.cfg
cd ~/.VirtualBox/TFTP/pxelinux.cfg

Далее создаем файл конфигурации default следующего содержания:

prompt 0
default linux
timeout 5

label linux
kernel bzImage
append ip=dhcp root=/dev/nfs nfsroot=192.168.1.100:/var/lib/nfsroot

При этом:

  • 192.168.1.100 это ваш ip адрес (который настроен на вашем компьютере автоматически или в ручную)
  • /var/lib/nfsroot указывает где находится необходимая нам корневая файловая система.

Если вы сейчас попробуете загрузить виртуальную машину, то загрузчик найдет ядро и загрузит его. Ядро запустится, но не найдет корневую файловую систему и перейдет в kernel panic. Чтобы избежать этого необходимо установить и настроить nfs сервер.
Для установки запускаем команду:

sudo apt-get install nfs-kernel-server

затем настраиваем экспорт каталога, где будет находиться корневая файловая система, в /etc/exports. Для этого в файл exports требуется добавить строку следующего вида:

/var/lib/nfsroot        *(ro,insecure,all_squash,no_subtree_check)

В качестве каталога для корневой файловой системы я выбрал /var/lib/nfsroot. Его требуется создать и распаковать туда корневую файловую систему. Сделать это можно следующим образом:

sudo mkdir /var/lib/nfsroot
cd /var/lib/nfsroot
sudo tar -xvf ~/stuff/build/tmp/deploy/glibc/images/x86/helloworld-image-x86.tar

В результате каталог /var/lib/nfsroot будет содержать корневую файловую систему. Проверить все ли в порядке можно при помощи следующей команды:

$ ls -l
итого 4
drwxr-xr-x 2 root root   17 Дек 31 00:50 bin
drwxr-xr-x 2 root root 4096 Дек 31 00:50 dev
drwxr-xr-x 3 root root   42 Дек 31 00:50 etc
drwxr-xr-x 4 root root   26 Дек 31 00:50 usr

Если вы получили аналогичный вывод значит все в порядке.
Запускаем nfs сервер:

sudo /etc/init.d/nfs-kernel-server start

Теперь сновая запускаем виртуальную машину. После того как она включится, должен будет запустится загрузчик, затем он запустит ядро, а ядро подключит по nfs корневую файловую систему и запустит /bin/init который является символической ссылкой на программу helloworld. И в результате вы должны увидеть вот такую картину:

OpenEmbedded в VirtualBox - Hello World

Если вы ее видите, то поздравляю вас. Вы собрали первый дистрибутив на базе OpenEmbedded!
А в следующий раз я расскажу как собрать систему состояющую не только из helloworld.

PS: Оригинальные версии использованных материалов: Здравствуй, Мир! Сборка, Здравствуй, Мир! Запуск.

PPS: defconfig файл можно скачать еще здесь.