Jump to content

    
Sign in to follow this  
Sanoend

Портирование ядра. Написал драйвер UART как корректно его подключить.

Recommended Posts

нет в suspend.c он не чего не правил.

Заметил полную не состоятельность патча.

Патч не чего не добавляет не в

/arch/arm/tools/mach-types

/arch/arm/Kconfig

/arch/arm/Makefile

/arch/arm/mm/Kconfig

а без этого ИМХО новая платформа просто не добавится.

Ну да фиг с ним, я не гордый. Раскидал руками всё что надо. Строчки добавил.

 

В конфиге явно прописал

CONFIG_SUSPEND=n

CONFIG_SUSPEND_FREEZER=n

и т.д.

но в той директории в которую я собираю появляется конфиг сформированный через автокоф компилятора и в нем

CONFIG_SUSPEND=y

CONFIG_SUSPEND_FREEZER=y

Почему игнорируются опции, которые я подставил не представляю.

 

 

Share this post


Link to post
Share on other sites
CONFIG_SUSPEND=n

Вроде должно быть:

# CONFIG_SUSPEND not set

 

Смотрите внимательней, может какме другие настройки включают это. Вообще, я бы поотключал через menuconfig, можно быстро найти необходимые настройки "/". Плюс, будет видно, что оно еще тянет и от чего зависит.

Share this post


Link to post
Share on other sites

Idle - файлы

/arch/arm/Kconfig

/arch/arm/Makefile

есть в первом патче но нет во втором.

 

Но не суть. Я решил попробовать собрать ядро с первым патчем.

Собрал всё что нужно из переписки, создал файлы патчей.

Попробовал пропатсчить ядра 3.0.4 , 3.1.1 , 3.1.2 , 3.2.0 , 3.2.1

всегда один и тот же результат. Ошибка при сборке

/home/armkernel/source/patchtest/linux-3.1.1/arch/arm/kernel/entry-armv.S: Assembler messages:
/home/armkernel/source/patchtest/linux-3.1.1/arch/arm/kernel/entry-armv.S:211: Error: bad instruction `get_irqnr_preamble r6,lr'
/home/armkernel/source/patchtest/linux-3.1.1/arch/arm/kernel/entry-armv.S:211: Error: bad instruction `get_irqnr_and_base r0,r2,r6,lr'
/home/armkernel/source/patchtest/linux-3.1.1/arch/arm/kernel/entry-armv.S:408: Error: bad instruction `get_irqnr_preamble r6,lr'
/home/armkernel/source/patchtest/linux-3.1.1/arch/arm/kernel/entry-armv.S:408: Error: bad instruction `get_irqnr_and_base r0,r2,r6,lr'
make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1
make[1]: *** [arch/arm/kernel] Error 2
make: *** [sub-make] Error 2

 

Зато разобрался почему ядро игнорировало мои опции конфигурирования.

Я таскал свой конфиг с ветки 2.6.31, для третьей ветки в нем многого не хватало.

Через автоконф перевел его на третью ветку, а затем руками подправил всё что нужно.

 

Но что делать я ошибками сборки, я пока не представляю. Под ARM VERSATILE ядро успешно собирается. Значит ошибка где-то в mach части под мой камень.

Или в конфигурации, например, верно выбран процессор, но не верна целевая платформа.

Разбираюсь дальше....

Share this post


Link to post
Share on other sites
/arch/arm/Kconfig

/arch/arm/Makefile

есть в первом патче но нет во втором.

так вот же в пятой части: http://lists.infradead.org/pipermail/linux...ber/070011.html

 

всегда один и тот же результат. Ошибка при сборке

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

 

Share this post


Link to post
Share on other sites

если поменять в конфиге

CONFIG_ARCH_VERSATILE=y на

CONFIG_ARCH_VERSATILE=n

 

а

CONFIG_ARCH_SHARK=y

то ошибки получаются другие.

Похоже на третьей ветке ядра по мимо процесора надо ещё и целевую платформу выбрать.

Какую выбирать для этого проца пока не знаю.

Но сейчас попробую покурить сырцы mach части. Может там какую подсказку найду.

Share this post


Link to post
Share on other sites
Или в конфигурации, например, верно выбран процессор, но не верна целевая платформа.

да, что-то не так с выбором архитектуры

-D__LINUX_ARM_ARCH__=5 -march=armv5te -mtune=arm9tdmi

Share this post


Link to post
Share on other sites
Не понял ядро чего? Процессора, если так , то spmp8000 основан на ARM926, а он в свою очередь имеет V5 architecture

понятно, значит с ядром порядок

в arch/arm/mach-spmp8000/include/mach не хватает макросов (get_irqnr_preamble и прочие) или инклудов откуда их брать

это я уже не в курсе - к армоводам

 

Share this post


Link to post
Share on other sites

Idle спасибо вам за помощь.

Ну опубликую для истории, куда двинулся дальше.

get_irqnr_preamble и т.д. в действительности не хватало в mach части. Я уже писал их для ядра 2.6.31

по этому просто добавил в /mach/include/entry-macro.S строки

#include <mach/hardware.h>
#include <mach/irqs.h>
#include <mach/platform.h>

<-----><------>.macro<>disable_fiq
<------><------>.endm
<------><------>.macro  get_irqnr_preamble, base, tmp
<------><------>.endm
<------><------>.macro  arch_ret_to_user, tmp1, tmp2
<------><------>.endm
<------><------>.macro<>get_irqnr_and_base, irqnr, irqstat, base, tmp
<------><------>.endm

и создал там же файл platform.h

#ifndef __PLATFORM_H__
#define __PLATFORM_H__


#define>SPMP8K_IO_BASE<><------>0x90000000


#define>SPMP8K_UART0_BASE<----->0x92B04000
#define>SPMP8K_UART0_DATA<----->0x00
#define>SPMP8K_UART0_STAT1<---->0x14<-->// 0x92B04014
#define>SPMP8K_UART0_STAT2<---->0x18<-->// 0x92B04018
#define>SPMP8K_UART0_STAT3<---->0x20<-->//

 

Эта ошибка пропала. Компиляция двинулась чуть дальше и стала появляться ошибка

 

/home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/debug.S: Assembler messages:

/home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/debug.S:159: Error: too many positional arguments

/home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/debug.S:175: Error: too many positional arguments

 

 

Ну тут более менее понятно в чем причина, видимо в более старых (или наоборот новых) версиях ядра, передавались два параметра в addruart и именно это и объявленно в

/arch/arm/mach-spmp8000/include/mach/debug-macro.S

<------>.macro  addruart, rp, rv
<------>mov     \rp, #0x92000000
<------>add<--->\rp, #0x00B00000
<------>add<--->\rp, #0x00004000
<------>orr<--->\rv, \rp, #0xF0000000
<------>.endm

#define UART_SHIFT 2
#include <asm/hardware/debug-8250.S>

а в /arch/arm/kernel/debug.S вызов идет с тремя параметрами

<------><------>addruart_current r3, r1, r2

На данный моммент я решил не вникать, что там такое изменили и решил проблему самым простым и не правильным образом (только для теста)

в /arch/arm/mach-spmp8000/include/mach/debug-macro.S

 

<------>.macro  addruart, rp, rv, rb

 

и встретил новую ошибку компиляции

CC arch/arm/mach-spmp8000/core.o

/home/armkernel/source/patchtest/linux-3.2.28/arch/arm/mach-spmp8000/core.c: In function ‘spmp8000_init_irq’:

/home/armkernel/source/patchtest/linux-3.2.28/arch/arm/mach-spmp8000/core.c:90:2: error: implicit declaration of function ‘vic_of_init’

а вот такие ошибки всегда ставят меня в полный тупик.

неявное объявление функции "vic_of_init" , как его сделать явным?

 

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

Ход моих мыслей верный?

Share this post


Link to post
Share on other sites
у меня есть подозрение, что функция vic_of_init вызывается, но не где не объявлена. Или объявлена но не инклудится.

Ход моих мыслей верный?

да, такой функции нигде нет

Share this post


Link to post
Share on other sites

посмотрел в ванили 3.5.х там эта функция есть. Так что похоже патч предназначен для более познего ядра.

В ядре 3.2.1 этой функции так же нет.

Буду лазить тут

http://lxr.free-electrons.com/source/arch/...mmon/vic.c#L407

и искать в какой версии она появилась. Затем попробую скачать и пропатчить эту версию.

Посмотрим на что ругаться будет.

Сильнее всего угнетает перспектива по новой править конфиг.

Share this post


Link to post
Share on other sites

Ядро упорно собирается под арм версализ.

Пытаюсь выставить через

make ARCH=arm menuconfig и загрузку своего конфига нужный мне процессор в system type -> ARM system type

нудный мне проц. А там его нету.

Хотя на более раних версиях ядра было SPMP8000 SoC.

Думаю как сделать что бы он появился.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this