Author Topic: Как пересобрать ядро CB1?  (Read 25260 times)

Offline null

  • Full Member
  • ***
  • Posts: 154
  • Karma: +5/-11
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #30 on: December 03, 2014, 12:54:53 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 собираю\пересобираю ядра.
Подскажите лучше, вы перекомпилировали ядро из свежих сырцов, версии 3.4.103 ? Когда компилируешь с дефолтным конфигом отключается питание SATA, может подскажете, какая инструкция конфига ядра за это отвечает?
не помню уже, вам отвечал или кому-то другому - попробуйте слить и использовать .config с рабочего ядра :
Code: [Select]
zcat /proc/config.gz
« Last Edit: December 03, 2014, 02:54:05 pm by null »

Offline null

  • Full Member
  • ***
  • Posts: 154
  • Karma: +5/-11
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #31 on: December 03, 2014, 01:18:02 pm »
make ARCH=arm CROSS_COMPILE= modules_install
А нахрена ARCH и CROSS_COMPILE на кубике? Там же gcc и так под целевую платформу собирает.
Это просто переменные, а не инструкции компилятора, на работу GCC они не влияют. Они могут быть где-то задействованы в make файлах\скриптах, и если компиляция вылетает, то нужно их задать.
ARCH=arm явным образом указывает что целевая архитектура - ARM, а не X86 или там MIPS.
А "CROSS_COMPILE= " с пробелом после знака "=" как раз и говорит, что нет никакого CROSS_COMPILE - будет использоваться системный компилятор.

для примера, вот таким скриптом компилю ядро на железке(A10) :
Code: [Select]
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
« Last Edit: December 04, 2014, 04:47:09 pm by null »

Offline Раджа

  • Sr. Member
  • ****
  • Posts: 438
  • Karma: +6/-2
  • Разбираюсь в чем попало
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #32 on: December 05, 2014, 01:21:44 am »
Я в курсе, что это переменные окружения. Я и спрашиваю про явное задание архитектуры через них.
Заткнись и смотри аниме!

Offline Jekl

  • Newbie
  • *
  • Posts: 15
  • Karma: +0/-0
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #33 on: December 07, 2014, 07:27:12 am »
А как скомпилить только конкретный драйвер? Конфиг настроил, ядро собрал. Модули тоже.
Теперь мне нужно добавить модуль драйвера для конкретного устройства. Собираю командой
Code: [Select]
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modulesНо, для этого добавляю нужный драйвер в конфиге и затем компилятся все модули.
А вот какую нужно дать команду, чтобы запустить компиляцию только одного конкретного модуля?

Offline null

  • Full Member
  • ***
  • Posts: 154
  • Karma: +5/-11
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #34 on: December 07, 2014, 07:55:27 am »
Собираю командой
Code: [Select]
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
« Last Edit: December 07, 2014, 08:10:54 am by null »

Offline pistoletov

  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #35 on: December 09, 2014, 06:29:38 am »
Если у тебя стоит ARCH, то все просто:
1. Компилятор arm-linux-gnueabihf , он доступен из AUR
2. Не забудь поставить  uboot-mkimage, иначе не соберется uImage
3. Выкачай сырцы ядра отсюда
.....
ну немного не так - у меня arch стоит на кубике. а на большом  убунту.
Начал собирать модули и место закончилось на флешке (у меня убунту запускается с флешки в persistence режиме).
Как можно удалить результаты неудачной компиляции?
« Last Edit: December 09, 2014, 05:00:47 pm by pistoletov »

Offline Раджа

  • Sr. Member
  • ****
  • Posts: 438
  • Karma: +6/-2
  • Разбираюсь в чем попало
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #36 on: December 10, 2014, 02:45:53 am »
make mrproper
Заткнись и смотри аниме!

Offline pistoletov

  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #37 on: December 11, 2014, 07:43:33 am »
несколько вопросов возникло:
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 файле его разрешить?

Offline Раджа

  • Sr. Member
  • ****
  • Posts: 438
  • Karma: +6/-2
  • Разбираюсь в чем попало
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #38 on: December 11, 2014, 08:17:27 am »
Quote
xubuntu@xubuntu:/mnt/temp$ sudo umount /dev/sdc1
umount: /mnt/temp: device is busy.
Пилишь сук, на котором сидишь.
Заткнись и смотри аниме!

Offline pistoletov

  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #39 on: December 11, 2014, 08:29:33 am »
понял где тупил. Все сделал по http://linux-sunxi.org/Linux_Kernel сборку.Версия ядра изменилась по uname -a команде. Но система перестала номрально грузится - вылетают ошибки в файловой системе. Это неправильно что-то при конфигурировании ядра?

Offline pistoletov

  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
    • View Profile
Как пересобрать ядро CB1?
« Reply #40 on: December 11, 2014, 11:35:02 am »
не совсем понятно о дефолтном конфиге. Я его создавал  командой - make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun4i_defconfig.  Вот не совсем понял - эта команда создает файл конфига или берет его откуда-то для кубика первого? Может где-то для  первого кубика  отдельно надо взять конфиг или получить его из самого кубика текущий конфиг..Мне нужно просто spi включить
« Last Edit: December 11, 2014, 03:05:00 pm by pistoletov »

Offline null

  • Full Member
  • ***
  • Posts: 154
  • Karma: +5/-11
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #41 on: December 11, 2014, 03:57:01 pm »
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun4i_defconfig.  Вот не совсем понял - эта команда создает файл конфига или берет его откуда-то для кубика первого?
Берёт из "arch/arm/configs/sun4i_defconfig".

Offline pistoletov

  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #42 on: December 11, 2014, 03:59:00 pm »
А где взять конфиг именно под первый кубик? Как-то его из /proc получить можно вроде?


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

Offline null

  • Full Member
  • ***
  • Posts: 154
  • Karma: +5/-11
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #43 on: December 11, 2014, 04:05:19 pm »
А где взять конфиг именно под первый кубик? Как-то его из /proc получить можно вроде?
Он лежит в arch/arm/configs/sun4i_defconfig, берёшь его за отправную точку, затем настраиваешь как тебе нужно.
С рабочего ядра можно попробовать слить командой:
Code: [Select]
zcat /proc/config.gz

Offline pistoletov

  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
    • View Profile
Re: Как пересобрать ядро CB1?
« Reply #44 on: December 11, 2014, 04:06:41 pm »
Попробую. Но мне показалось что /proc пустой у меня.


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