Чтобы отправить ответ, вы должны войти или зарегистрироваться
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум MaemoWorld.ru → Форум Nokia N900 → Компиляция ядра. Как делать и зачем это нужно
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Для меня основным вопросом про сборку ядра были:
Какой максимальный доступный размер может быть у ядра чтобы его можно было прошить на устройство?
Какие компоненты нельзя убрать из ядра (вынести модулем) или какие компоненты которые изначально были модулями могут привести к невозможности загрузки если их включить в ядро?
Просто пока сколько я не собирал ядро если слишком сильно моя конфигурация отличается от оригинальной то устройство перестает загружаться.
Да........ Мне сюда пока очень рано Так что просто буду слушать умные идеи)
Fr1men
сначала
1) нужен комп с линуксом - дебиан или убунту
2) в нем нужен установленный SDK
3) осталось все совсем просто - собрать свое ядро по этому ману http://wiki.maemo.org/Documentation/Mae … rnel_Guide
Добавлено: 14.01.2010 10:37:05
Просто пока сколько я не собирал ядро если слишком сильно моя конфигурация отличается от оригинальной то устройство перестает загружаться.
для тех кто испугался
при сборке ядра сначала формируется дефолтный конфиг
если наше ядро убило машинку - собираем дефолтное ядро и льем его. (всего 1700к) все. машина вновь жива и здорова,
Какой максимальный доступный размер может быть у ядра чтобы его можно было прошить на устройство?
[58494.714630] Creating 6 MTD partitions on "omap2-onenand":
[58494.714691] 0x00000000-0x00020000 : "bootloader"
[58494.715087] 0x00020000-0x00080000 : "config"
[58494.715332] 0x00080000-0x000c0000 : "log"
[58494.717803] mtdoops: Attached to MTD device 2
[58494.717834] 0x000c0000-0x002c0000 : "kernel"
[58494.718109] 0x002c0000-0x004c0000 : "initfs"
[58494.718383] 0x004c0000-0x10000000 : "rootfs"
0x002c0000 - 0x000c0000 = 2 097 152 bytes
Ответил в этой теме, и потерял её )) теперь что-нить буду пробовать
как и говорил, нужно только начать да кончить)))
я - драчистый изумруд (С)
итак, приступим
открываем статью
http://wiki.maemo.org/Documentation/Mae … rnel_Guide
и разбираемся в ней по шагам
Kernel Guide
This chapter describes how to configure, compile and flash the Linux kernel for the Internet Tablet device. The chapter is targeted at developers wishing to compile their own custom kernels for the device.
ну здесь вода
эта глава описывает как собрать ядро бла бла бла
Prerequisites
Before starting, set up the Maemo environment. The required GCC toolchain that is used to compile the kernel is included in the Scratchbox by default.
Setting up a separate target for kernel compilation is not mandatory, but this example does it in case the default armel target has been modified in some way.
перед стартом настроим окружение Maemo. требуемый инструментарий имеется по умолчанию в Scrathbox
установка отдельного таргета для сборки ядра не является обязательным, но в этом примере сделаем это, чтобы Armel таргет можно было курочить отдельно
Start Scratchbox.
$ scratchbox
ну тут понятно
запускаем собственно Scratchbox (среда разработки SDK)
$ scratchbox
Welcome to Scratchbox, the cross-compilation toolkit!
Use 'sb-menu' to change your compilation target.
See /scratchbox/doc/ for documentation.
[sbox-FREMANTLE_ARMEL: ~] >
Create a new target called MaemoKernel with qemu-arm CPU transparency. The second command installs the armel rootstraps to the target. The last command installs the C-library, /etc, devkits and fakeroot.
[sbox-FREMANTLE_ARMEL: ~] > sb-conf setup MaemoKernel \
-c cs2007q3-glibc2.5-arm7 \
-d qemu:perl:svn:apt-https -t /scratchbox/devkits/qemu/bin/qemu-arm-sb
[sbox-FREMANTLE_ARMEL: ~] > sb-conf select MaemoKernel
[sbox-MaemoKernel: ~] > sb-conf rs MaemoKernel \
/home/<username>/maemo-sdk-rootstrap_5.0_armel.tgz
[sbox-MaemoKernel: ~] > sb-conf in MaemoKernel -edFLThe <username> above refers to your login name in the environment. If you have used the Maemo installer, the rootstraps are under your home directory. If you have performed a manual installation, the rootstrap is under the /scratchbox/packages directory. Keep this in mind when running the sb-conf command above.
создаем новый таргет MaemoKernel
у меня он уже создан, о чем тут и говорится
[sbox-FREMANTLE_ARMEL: ~] > sb-conf setup MaemoKernel \
> -c cs2007q3-glibc2.5-arm7 \
> -d qemu:perl:svn:apt-https -t /scratchbox/devkits/qemu/bin/qemu-arm-sb
sb-conf: Target already exists: MaemoKernel
[sbox-FREMANTLE_ARMEL: ~] >
бэкслеш в конце некоторых строк говорит о переносе команды на следующую строку
так что можно копипастить сразу все строки длинной команды
переключаемся на созданный таргет
[sbox-FREMANTLE_ARMEL: ~] > sb-conf select MaemoKernel
Shell restarting...
[sbox-MaemoKernel: ~] >
Эта команда устанавливает Армел rootstraps к таргету. здесь я подставил вместо <username> своего юзера
sb-conf select MaemoKernel
[sbox-MaemoKernel: ~] > sb-conf rs MaemoKernel \
/home/littre/maemo-sdk-rootstrap_5.0_armel.tgz
Unpacking rootstrap...
[sbox-MaemoKernel: ~] >
Последняя команда устанавливает C-библиотека, / и т.д., и devkits fakeroot.
[sbox-MaemoKernel: ~] > sb-conf in MaemoKernel -edFL
Installing fakeroot version 1.4.2.1...
[sbox-MaemoKernel: ~] >
едем дальше
Verify that the sources.list file inside the Scratchbox environment is correct. If the below lines are not in the /etc/apt/sources.list file, add them there.
deb http://repository.maemo.org/ fremantle/sdk free non-free
deb-src http://repository.maemo.org/ fremantle/sdk freedeb http://repository.maemo.org/ fremantle/tools free non-free
deb-src http://repository.maemo.org/ fremantle/tools free
убедитесь, что нужные репы подключены
да подключены они, их прописал туда инсталлер SDK
проверим
[sbox-MaemoKernel: ~] > cat /etc/apt/sources.list
deb [url]http://repository.maemo.org/[/url] fremantle/sdk free non-free
deb-src [url]http://repository.maemo.org/[/url] fremantle/sdk free
deb [url]http://repository.maemo.org/[/url] fremantle/tools free non-free
deb-src [url]http://repository.maemo.org/[/url] fremantle/tools free
[sbox-MaemoKernel: ~] >
все на месте
Create a working directory (inside Scratchbox) for the kernel sources.
создайте рабочую директорию, где будем ваять шедевр
[sbox-MaemoKernel: ~] > mkdir ~/maemo_kernel
теперь среда scratchbox готова к сборке ядра
Getting Kernel Sources
Kernel sources are not included in the rootstrap. Therefore, you need to download them from the repository.
получение исходников ядра
по умолчанию они не включены в rootstrap, следовательно, нам надо их качнуть из репы
Select the kernel compilation target, if not selected already.
выбираем таргет MaemoKernel, если это еще не сделано что за автор, мыж только что это сделали)
[sbox-FREMANTLE_ARMEL: ~] > sb-conf select MaemoKernel
Update the package database. This requires the earlier modifications in the sources.list file.
Обновим базы данных
[sbox-MaemoKernel: ~] > fakeroot apt-get update
Ign [url]http://repository.maemo.org[/url] fremantle/sdk Release.gpg
Ign [url]http://repository.maemo.org[/url] fremantle/tools Release.gpg
Ign [url]http://repository.maemo.org[/url] fremantle/sdk Release
Ign [url]http://repository.maemo.org[/url] fremantle/tools Release
Ign [url]http://repository.maemo.org[/url] fremantle/sdk/free Packages/DiffIndex
Ign [url]http://repository.maemo.org[/url] fremantle/sdk/non-free Packages/DiffIndex
Ign [url]http://repository.maemo.org[/url] fremantle/sdk/free Sources/DiffIndex
Ign [url]http://repository.maemo.org[/url] fremantle/tools/free Packages/DiffIndex
Ign [url]http://repository.maemo.org[/url] fremantle/tools/non-free Packages/DiffIndex
Ign [url]http://repository.maemo.org[/url] fremantle/tools/free Sources/DiffIndex
Get:1 [url]http://repository.maemo.org[/url] fremantle/sdk/free Packages [246kB]
Get:2 [url]http://repository.maemo.org[/url] fremantle/sdk/non-free Packages [3515B]
Get:3 [url]http://repository.maemo.org[/url] fremantle/sdk/free Sources [99.4kB]
Get:4 [url]http://repository.maemo.org[/url] fremantle/tools/free Packages [28.7kB]
Get:5 [url]http://repository.maemo.org[/url] fremantle/tools/non-free Packages [20B]
Get:6 [url]http://repository.maemo.org[/url] fremantle/tools/free Sources [14.0kB]
Fetched 391kB in 3s (117kB/s)
Reading package lists... Done
[sbox-MaemoKernel: ~] >
Go to the working directory and fetch the sources.
Входим в рабочую директорию и тянем сырцы
[sbox-MaemoKernel: ~] > cd ~/maemo_kernel
[sbox-MaemoKernel: ~/maemo_kernel] >
[sbox-MaemoKernel: ~/maemo_kernel] > apt-get source kernel
Reading package lists... Done
Building dependency tree... Done
Skipping already downloaded file 'kernel_2.6.28.orig.tar.gz'
Need to get 2290kB of source archives.
Get:1 [url]http://repository.maemo.org[/url] fremantle/sdk/free kernel 2.6.28-20100903+0m5 (dsc) [542B]
Get:2 [url]http://repository.maemo.org[/url] fremantle/sdk/free kernel 2.6.28-20100903+0m5 (diff) [2290kB]
Fetched 2290kB in 2s (810kB/s)
Skipping unpack of already unpacked source in kernel-2.6.28
[sbox-MaemoKernel: ~/maemo_kernel] >
ога
грит, у меня уже стянуто kernel_2.6.28.orig.tar.gz
дотягивает только изменения (diff)
ну ладно
Kernel sources should now be fetched and ready to be compiled.
исходники ядра у нас теперь получены и готовы к компиляции
Configuring Source Tree and Compiling Kernel
Конфигурация дерева исходников и собственно комниляция
A source subdirectory is listed. Enter the directory and create the default configuration.
смотрим название директории командой ls
[sbox-MaemoKernel: ~/maemo_kernel] > ls
apt-get kernel_2.6.28-20094102.3+0m5.dsc kernel_2.6.28.orig.tar.gz
kernel-2.6.28 kernel_2.6.28-20100903+0m5.diff.gz
kernel_2.6.28-20094102.3+0m5.diff.gz kernel_2.6.28-20100903+0m5.dsc
входим в нее
[sbox-MaemoKernel: ~/maemo_kernel ] > cd kernel-2.6.28
и создаем дефолтную конфигурацию ядра
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] > make EXTRAVERSION=-omap1 rx51_defconfig
# lots of output from make program...
не особо то и много вывода, вот он весь:
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/basic/hash
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] >
Compile the kernel image and check the image file timestamp to ensure that it is properly created.
Компилируем образ дефолтного ядра
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] > make EXTRAVERSION=-omap1 bzImage
# compilation output...
# много вывода компиляции...
реально долго идет сборка минут 10 (проц на компе Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz)
в конце наконец то выдает:
Kernel: arch/arm/boot/zImage is ready
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] >
и проверяем время файла, чтобы убедиться, что это действительно вы его сейчас создали, а не с прошлого раза он там остался
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] > ls -l arch/arm/boot/zImage
-rwxrwxr-x 1 littre littre 1741584 Apr 6 11:09 arch/arm/boot/zImage
The kernel is very strict on versions. EXTRAVERSION=-omap1 sets the version to match the default installation. Instead of always supplying it to the make command, as done in this chapter, it is possible to modify the kernel Makefile. Another alternative is to avoid using make directly and use dpkg-buildpackage -rfakeroot -b to compile the kernel.
Ядра очень требовательно к версии. EXTRAVERSION=-omap1 устанавливает версию в соответствии с установками по умолчанию. Вместо того, чтобы всегда обеспечить это для команды make, как это делается в этой главе, можно изменить Makefile ядра. Другой альтернативой является избегать make непосредственно и использовать dpkg-buildpackage -rfakeroot -b для компиляции ядра.
Now the device can be flashed with the new kernel image using the Flasher tool. This must be performed outside Scratchbox. For short instructions on flashing, see the Flashing Kernel section.
Теперь устройство может быть прошито новым образом ядра с помощью инструмента Flasher. Это должно осуществляться за пределами Scratchbox. Это уже отдельная (уже хорошо изученная) тема
приступаем к собсна разгону
редактируем текст исходника arch/arm/mach-omap2/omap3-opp.h
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] > vi arch/arm/mach-omap2/omap3-opp.h
#ifndef __OMAP3_OPP_H_
#define __OMAP3_OPP_H_
#include <mach/omap-pm.h>
/* MPU speeds */
#define S600M 600000000
#define S550M 550000000
#define S500M 500000000
#define S250M 250000000
#define S125M 125000000
/* DSP speeds */
#define S430M 430000000
#define S400M 400000000
#define S360M 360000000
#define S180M 180000000
#define S90M 90000000
/* L3 speeds */
#define S83M 83000000
#define S166M 166000000
static struct omap_opp omap3_mpu_rate_table[] = {
для начала меняе одну строку
с
#define S600M 600000000
на
#define S600M 900000000
снова собираем ядрышко
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] > make EXTRAVERSION=-omap1 bzImage
второй раз собралось намного быстрее
вот все что навыводило второй раз
пересобрался только измененный исходник, а остальные просто подлинковались
CHK include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' is up to date.
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-arm
CALL scripts/checksyscalls.sh
<stdin>:1097:2: warning: #warning syscall fadvise64 not implemented
<stdin>:1265:2: warning: #warning syscall migrate_pages not implemented
<stdin>:1321:2: warning: #warning syscall pselect6 not implemented
<stdin>:1325:2: warning: #warning syscall ppoll not implemented
<stdin>:1365:2: warning: #warning syscall epoll_pwait not implemented
CHK include/linux/compile.h
CC arch/arm/mach-omap2/board-rx51.o
LD arch/arm/mach-omap2/built-in.o
LD vmlinux.o
MODPOST vmlinux.o
GEN .version
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
KSYM .tmp_kallsyms1.S
AS .tmp_kallsyms1.o
LD .tmp_vmlinux2
KSYM .tmp_kallsyms2.S
AS .tmp_kallsyms2.o
LD .tmp_vmlinux3
KSYM .tmp_kallsyms3.S
AS .tmp_kallsyms3.o
LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
GZIP arch/arm/boot/compressed/piggy.gz
AS arch/arm/boot/compressed/piggy.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] > ls -l arch/arm/boot/zImage
-rwxrwxr-x 1 littre littre 1741584 Apr 6 11:21 arch/arm/boot/zImage
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28] >
закидываю по sftp на телефон новое ядро прямо со скретчбокса
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28/arch/arm/boot] > sftp root@192.168.1.22
Connecting to 192.168.1.22...
The authenticity of host '192.168.1.22 (192.168.1.22)' can't be established.
RSA key fingerprint is 3f:07:7b:8c:ef:f0:fa:32:06:7c:a0:b4:4a:b2:90:e0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.22' (RSA) to the list of known hosts.
root@192.168.1.22's password:
sftp> put zImage
Uploading zImage to /root/zImage
zImage 100% 1701KB 850.4KB/s 00:02
sftp> quit
[sbox-MaemoKernel: ~/maemo_kernel/kernel-2.6.28/arch/arm/boot] >
захожу для удобства копипастинга для статьи на телефон по ssh
$ ssh root@192.168.1.22
BusyBox v1.16.0 (2010-02-09 17:30:44 MSK) built-in shell (ash)
Enter 'help' for a list of built-in commands.
Nokia-N900-02-8:~#
смотрю, вот оно мое ядро в хомяке лежит
Nokia-N900-02-8:~# ls
authorized_keys id_rsa zImage
Nokia-N900-02-8:~#
шью его
Nokia-N900-02-8:~# fiasco-flasher -k zImage -f
Reading and flashing kernel image
Image(s) successfully flashed
Nokia-N900-02-8:~#
ребучусь командой init 6 (ибо reboot в этой сборке BusyBox - не фурычит))))
Nokia-N900-02-8:~# init 6
+ [ x6 = x-t ]
+ touch /tmp/reboot
+ initctl start --no-wait shutdown
дальше телефон взлетел и вуаля, только что была тыща от SR, стала с моим собственным ядром на 900
вот оно, кто хочет - поюзайте
это не бениково ядро с maemo.org - там нижний порог на 125
тут все остальные частоты кроме верхней оставлены без изменений
Такой вопрос что такое ТАРГЕТ в данном понимании, и для чего цель создается и каков ее смысл???
Такой вопрос что такое ТАРГЕТ в данном понимании, и для чего цель создается и каков ее смысл???
Хост - система на который ты производишь сборку.
Таргет — система для которой ты делаешь сборку.
То есть тут ты же на компьютере в х86 системе делаешь сборку под таргет arm систему (хотя реально в скретчбоксе идет эмуляция arm и там по всей логике хост=таргет).
valek2282 пишет:Такой вопрос что такое ТАРГЕТ в данном понимании, и для чего цель создается и каков ее смысл???
Хост - система на который ты производишь сборку.
Таргет — система для которой ты делаешь сборку.
То есть тут ты же на компьютере в х86 системе делаешь сборку под таргет arm систему (хотя реально в скретчбоксе идет эмуляция arm и там по всей логике хост=таргет).
Ну вот это я примерно представляю а вот следующий отрезок из мануала:
создаем новый таргет MaemoKernel
у меня он уже создан, о чем тут и говорится
[sbox-FREMANTLE_ARMEL: ~] > sb-conf setup MaemoKernel \
> -c cs2007q3-glibc2.5-arm7 \
> -d qemu:perl:svn:apt-https -t /scratchbox/devkits/qemu/bin/qemu-arm-sb
sb-conf: Target already exists: MaemoKernel
[sbox-FREMANTLE_ARMEL: ~] >
1) Бла бла бла..... "sbox-FREMANTLE_ARMEL"-это уже по сути таргет правильно?зачем создаем дополнительный под именем MaemoKernel?
2) sb-conf select MaemoKernel
[sbox-MaemoKernel: ~] > sb-conf rs MaemoKernel \
/home/littre/maemo-sdk-rootstrap_5.0_armel.tgz
Unpacking rootstrap...
[sbox-MaemoKernel: ~] >
Что такое рутстрап и что делают эти команды?
3) [sbox-MaemoKernel: ~] > sb-conf in MaemoKernel -edFL
Installing fakeroot version 1.4.2.1...
[sbox-MaemoKernel: ~] >
что знаит эта команда и что такое фэйкрут?
Заранее спасибо за пояснения))))
valek2282
Это в скретчбоксе настройка окружения под какую систему собирать.
Понятия не имею зачем еще один таргет тут делать надо так как по настройкам он ничем от sbox-FREMANTLE_ARMEL не отличается. И тот и тот это arm система. Я лично все в sbox-FREMANTLE_ARMEL и собирал.
Дальше тут идет распаковка чистой системы сборки в новый таргет (минимальный набор инструментов для компиляции). Это делает команда
sb-conf rs MaemoKernel \
/home/littre/maemo-sdk-rootstrap_5.0_armel.tgz
Фейкрут подменяет корень системы при сборке пакета чтобы не забивался корень той системы на которой идет сборка.
А вот куда этот самый фейкрут ставится? в какую то область памяти в папку или еще куда? И если я допустим создавал при сборке ядра новую мишень для сборки, то где вся эта область для сборки (мишень) хранится в скрэтчбоксе?
почему то после переноса поста вложение не отображается
если редактировать - там вроде есть оно
глюк
в общем в виде отдельной ссылки в тексте сделал
ну так что
кому какие параметры компилить?
принимаю заказы
А куда спрятан раздел /boot, случайно не на том же носителе, где и корень? И если ядро стало легче на 8 метров после удаления дебаговой информации, нельзя ли их использовать для расширения корня?
А куда спрятан раздел /boot, случайно не на том же носителе, где и корень? И если ядро стало легче на 8 метров после удаления дебаговой информации, нельзя ли их использовать для расширения корня?
Именно само ядро в размере изменилось примерно на ~300Kb. И это ядро пишется в отдельную память размером в 2 097 152 bytes а не в /boot как на компьютеры.
Заметней изменился размер модулей (на ~8Mb). Они в корне и расположены и если удалить старые модули и оставить только новые то это место можно сэкономить.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум MaemoWorld.ru → Форум Nokia N900 → Компиляция ядра. Как делать и зачем это нужно
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Currently installed 6 official extensions. Copyright © 2003–2009 PunBB.
Сгенерировано за 0.202 секунды (98% PHP — 2% БД) 12 запросов к базе данных