1

Тема: Компиляция ядра. Как делать и зачем это нужно

будем здесь думать насчет этого

Поделиться

2

Re: Компиляция ядра. Как делать и зачем это нужно

Для меня основным вопросом про сборку ядра были:
Какой максимальный доступный размер может быть у ядра чтобы его можно было прошить на устройство?
Какие компоненты нельзя убрать из ядра (вынести модулем) или какие компоненты которые изначально были модулями могут привести к невозможности загрузки если их включить в ядро?

Просто пока сколько я не собирал ядро если слишком сильно моя конфигурация отличается от оригинальной то устройство перестает загружаться.

Сайт SR

Поделиться

3

Re: Компиляция ядра. Как делать и зачем это нужно

Да........ Мне сюда пока очень рано sad Так что просто буду слушать умные идеи)

Поделиться

4

Re: Компиляция ядра. Как делать и зачем это нужно

Fr1men
сначала
1) нужен комп с линуксом - дебиан или убунту
2) в нем нужен установленный SDK
3) осталось все совсем просто - собрать свое ядро по этому ману http://wiki.maemo.org/Documentation/Mae … rnel_Guide

Добавлено: 14.01.2010 10:37:05

SR пишет:

Просто пока сколько я не собирал ядро если слишком сильно моя конфигурация отличается от оригинальной то устройство перестает загружаться.

для тех кто испугался
при сборке ядра сначала формируется дефолтный конфиг
если наше ядро убило машинку - собираем дефолтное ядро и льем его. (всего 1700к) все. машина вновь жива и здорова,

Поделиться

5

Re: Компиляция ядра. Как делать и зачем это нужно

SR пишет:

Какой максимальный доступный размер может быть у ядра чтобы его можно было прошить на устройство?

[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

kernel panic, core dumped, system halted, please reboot this world.

6

Re: Компиляция ядра. Как делать и зачем это нужно

Ответил в этой теме, и потерял её )) теперь что-нить буду пробовать

Поделиться

7 (22.04.2010 19:47:15 отредактировано littre)

Re: Компиляция ядра. Как делать и зачем это нужно

как и говорил, нужно только начать да кончить)))
я - драчистый изумруд (С)
итак, приступим
открываем статью
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 -edFL


The <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 free

deb 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
тут все остальные частоты кроме верхней оставлены без изменений

Поделиться

8

Re: Компиляция ядра. Как делать и зачем это нужно

Такой вопрос что такое ТАРГЕТ в данном понимании, и для чего цель создается и каков ее смысл???

Поделиться

9

Re: Компиляция ядра. Как делать и зачем это нужно

valek2282 пишет:

Такой вопрос что такое ТАРГЕТ в данном понимании, и для чего цель создается и каков ее смысл???

Хост - система на который ты производишь сборку.
Таргет — система для которой ты делаешь сборку.
То есть тут ты же на компьютере в х86 системе делаешь сборку под таргет arm систему (хотя реально в скретчбоксе идет эмуляция arm и там по всей логике хост=таргет).

Сайт SR

Поделиться

10

Re: Компиляция ядра. Как делать и зачем это нужно

SR пишет:
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: ~] >
что знаит эта команда и что такое фэйкрут?

Заранее спасибо за пояснения))))

Поделиться

11

Re: Компиляция ядра. Как делать и зачем это нужно

valek2282
Это в скретчбоксе настройка окружения под какую систему собирать.

Понятия не имею зачем еще один таргет тут делать надо так как по настройкам он ничем от sbox-FREMANTLE_ARMEL не отличается. И тот и тот это arm система. Я лично все в  sbox-FREMANTLE_ARMEL и собирал.

Дальше тут идет распаковка чистой системы сборки в новый таргет (минимальный набор инструментов для компиляции). Это делает команда
sb-conf rs MaemoKernel \
/home/littre/maemo-sdk-rootstrap_5.0_armel.tgz

Фейкрут подменяет корень системы при сборке пакета чтобы не забивался корень той системы на которой идет сборка.

Сайт SR

Поделиться

12

Re: Компиляция ядра. Как делать и зачем это нужно

А вот куда этот самый фейкрут ставится? в какую то область памяти в папку или еще куда? И если я допустим создавал при сборке ядра новую мишень для сборки, то где вся эта область для сборки (мишень) хранится в скрэтчбоксе?

Поделиться

13

Re: Компиляция ядра. Как делать и зачем это нужно

почему то после переноса поста вложение не отображается
если редактировать - там вроде есть оно
глюк
в общем в виде отдельной ссылки в тексте сделал

ну так что
кому какие параметры компилить?
принимаю заказы cool

Поделиться

14

Re: Компиляция ядра. Как делать и зачем это нужно

А куда спрятан раздел /boot, случайно не на том же носителе, где и корень? И если ядро стало легче на 8 метров после удаления дебаговой информации, нельзя ли их использовать для расширения корня?

Поделиться

15

Re: Компиляция ядра. Как делать и зачем это нужно

pasaranax пишет:

А куда спрятан раздел /boot, случайно не на том же носителе, где и корень? И если ядро стало легче на 8 метров после удаления дебаговой информации, нельзя ли их использовать для расширения корня?

Именно само ядро в размере изменилось примерно на ~300Kb. И это ядро пишется в отдельную память размером в 2 097 152 bytes а не в /boot как на компьютеры.
Заметней изменился размер модулей (на ~8Mb). Они в корне и расположены и если удалить старые модули и оставить только новые то это место можно сэкономить.

Сайт SR

Поделиться