September 21, 2019, 01:29:01 pm

News:

Have you visited the Allwinner Chipset wiki? - http://linux-sunxi.org/


Как пересобрать ядро CB1?

Started by LinboG, May 28, 2014, 02:43:30 am

Previous topic - Next topic

null

December 03, 2014, 12:54:53 pm #30 Last Edit: December 03, 2014, 02:54:05 pm by null
Quote from: LinboG on December 01, 2014, 07:18:47 pm
Открою секрет, что компилить можно не только именно этим компилятором и вообще этот мануал для Ubunt`ы.
Посмотрите мануал по сборке ядра http://linux-sunxi.org/Linux_Kernel, я не вижу нигде того, чтобы использовался древний gcc, почему-то везде arm-linux-gnueabihf- .
Лучше, проще и адаптивней под админа, чем ARCH вы не найдете, разве что gentoo, но он далеко не прост.

В мануале по сборке ядра есть ссылка на тулчейн для кросскомпиляции, её же и привёл выше. И там не именно для Ubunt'ы инструкция. В разделе "Standalone" предлагается использовать "Linaro GCC" не выше 4.7, или же "Code Sourcery GCC" версии 4.5".
arm-linux-gnueabihf - это просто набор символов\букв...  , можете сами как угодно назвать свой компилятор собрав его с директивой "--build", например "--build=arm-superfast-optimized-gcc".
Тестил компиляцию ядра и uboot верcиями gcc с 4.5 по 4.8. С GCC выше 4.6 , на A10/20 у меня например u-boot не грузился. Ну и во всяких стоковых android'aх сразу проблемы вылазили если ядро другой(не 4.5/4.6) версией компилятора собрано.
У меня Gentoo и на A10 и на A20 и везде :) .
Предпочитаю нативную компиляцию - на самом устройстве, системный компилятор для сборки ядра не использую, скачал исходники "Linaro GCC", скомпилил на самих девайсах, а затем уже полученным GCC собираю\пересобираю ядра.
Quote from: LinboG on December 01, 2014, 07:18:47 pm
Подскажите лучше, вы перекомпилировали ядро из свежих сырцов, версии 3.4.103 ? Когда компилируешь с дефолтным конфигом отключается питание SATA, может подскажете, какая инструкция конфига ядра за это отвечает?

не помню уже, вам отвечал или кому-то другому - попробуйте слить и использовать .config с рабочего ядра :
zcat /proc/config.gz

null

December 03, 2014, 01:18:02 pm #31 Last Edit: December 04, 2014, 04:47:09 pm by null
Quote from: sergr on December 02, 2014, 04:08:58 am
make ARCH=arm CROSS_COMPILE= modules_install

Quote from: Раджа on December 02, 2014, 07:02:44 am
А нахрена ARCH и CROSS_COMPILE на кубике? Там же gcc и так под целевую платформу собирает.

Это просто переменные, а не инструкции компилятора, на работу GCC они не влияют. Они могут быть где-то задействованы в make файлах\скриптах, и если компиляция вылетает, то нужно их задать.
ARCH=arm явным образом указывает что целевая архитектура - ARM, а не X86 или там MIPS.
А "CROSS_COMPILE= " с пробелом после знака "=" как раз и говорит, что нет никакого CROSS_COMPILE - будет использоваться системный компилятор.

для примера, вот таким скриптом компилю ядро на железке(A10) :
export CROSS_COMPILE=/mnt/usbhdd/src/GCC/gcc-linaro-4.6.4-thumb-O2-a8/bin/
cd sunxi-3.4-a10
cp -f .config ../configs-3.4-a10/.config
cp -f .config ../configs-3.4-a10/.config.backup-$(date +%d%m%Y-%T)
make clean && make mrproper
cp -f ../configs-3.4-a10/.config .config
scripts/build_sun4i_crane.sh kernel
strip  -x --strip-unneeded --strip-debug -R .comment output/lib/modules/3.*/*.ko

Раджа

Я в курсе, что это переменные окружения. Я и спрашиваю про явное задание архитектуры через них.
Заткнись и смотри аниме!

Jekl

А как скомпилить только конкретный драйвер? Конфиг настроил, ядро собрал. Модули тоже.
Теперь мне нужно добавить модуль драйвера для конкретного устройства. Собираю командойmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
Но, для этого добавляю нужный драйвер в конфиге и затем компилятся все модули.
А вот какую нужно дать команду, чтобы запустить компиляцию только одного конкретного модуля?

null

December 07, 2014, 07:55:27 am #34 Last Edit: December 07, 2014, 08:10:54 am by null
Quote from: Jekl on December 07, 2014, 07:27:12 am
Собираю командойmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
Но, для этого добавляю нужный драйвер в конфиге и затем компилятся все модули.
А вот какую нужно дать команду, чтобы запустить компиляцию только одного конкретного модуля?


если драйвер=m, то собираете модуль :
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- M=drivers/staging/zram
модуль будет лежать тут - drivers/staging/zram/zram.ko

если драйвер=y, то собираете ядро :
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
ядро будет лежать тут - arch/arm/boot/uImage

pistoletov

December 09, 2014, 06:29:38 am #35 Last Edit: December 09, 2014, 05:00:47 pm by pistoletov
Quote from: LinboG on November 30, 2014, 06:33:37 am
Если у тебя стоит ARCH, то все просто:
1. Компилятор arm-linux-gnueabihf , он доступен из AUR
2. Не забудь поставить  uboot-mkimage, иначе не соберется uImage
3. Выкачай сырцы ядра отсюда
.....

ну немного не так - у меня arch стоит на кубике. а на большом  убунту.
Начал собирать модули и место закончилось на флешке (у меня убунту запускается с флешки в persistence режиме).
Как можно удалить результаты неудачной компиляции?

Раджа

Заткнись и смотри аниме!

pistoletov

несколько вопросов возникло:
1. Результат uImage переношу на карточку простым копирование? сделал через CP но потому не могу размонтировать флешку
xubuntu@xubuntu:/mnt/temp$ sudo umount /dev/sdc1
umount: /mnt/temp: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
2. Модули просто так копируются через cp?
3. Когда конфигурирую ядро там очень много всяких опций. Мне нужно включить в ядро SPI - мне достаточно поставить звездочку на драйвере SPI и больше нигде лазить не надо?
4. Для включения SPI мне потом еще нужно в bin файле его разрешить?

Раджа

Quotexubuntu@xubuntu:/mnt/temp$ sudo umount /dev/sdc1
umount: /mnt/temp: device is busy.

Пилишь сук, на котором сидишь.
Заткнись и смотри аниме!

pistoletov

понял где тупил. Все сделал по http://linux-sunxi.org/Linux_Kernel сборку.Версия ядра изменилась по uname -a команде. Но система перестала номрально грузится - вылетают ошибки в файловой системе. Это неправильно что-то при конфигурировании ядра?

pistoletov

December 11, 2014, 11:35:02 am #40 Last Edit: December 11, 2014, 03:05:00 pm by pistoletov
не совсем понятно о дефолтном конфиге. Я его создавал  командой - make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun4i_defconfig.  Вот не совсем понял - эта команда создает файл конфига или берет его откуда-то для кубика первого? Может где-то для  первого кубика  отдельно надо взять конфиг или получить его из самого кубика текущий конфиг..Мне нужно просто spi включить

null

Quote from: pistoletov on December 11, 2014, 11:35:02 am
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun4i_defconfig.  Вот не совсем понял - эта команда создает файл конфига или берет его откуда-то для кубика первого?

Берёт из "arch/arm/configs/sun4i_defconfig".

pistoletov

А где взять конфиг именно под первый кубик? Как-то его из /proc получить можно вроде?


Отправлено с моего iPhone используя Tapatalk

null

Quote from: pistoletov on December 11, 2014, 03:59:00 pm
А где взять конфиг именно под первый кубик? Как-то его из /proc получить можно вроде?

Он лежит в arch/arm/configs/sun4i_defconfig, берёшь его за отправную точку, затем настраиваешь как тебе нужно.
С рабочего ядра можно попробовать слить командой:
zcat /proc/config.gz

pistoletov

Попробую. Но мне показалось что /proc пустой у меня.


Отправлено с моего iPhone используя Tapatalk