реклама на сайте
подробности

 
 
> Портирование ядра. Написал драйвер UART как корректно его подключить., spmp8000
Sanoend
сообщение Aug 16 2012, 08:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 16-08-12
Пользователь №: 73 144



Здравствуйте. Я пытаюсь портировать ядро линукс на процессор SPMP8000 (основан на arm926).
Я написал свой драйвер ЮАРТ (пока сильно упрощенный вариант).
Вот код драйвера:

CODE
#include <linux/console.h>
#include <linux/serial_core.h>
#include <asm/io.h>
#include <mach/serial.h>

#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/spinlock.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/sched.h>
#include <linux/smp.h>
#include <linux/termios.h>
#include <linux/amba/bus.h>
#include <linux/amba/serial.h>
#include <linux/io.h>
#include <mach/platform.h>
#include <mach/hardware.h>
#include <asm/irq.h>
#include <asm/mach-types.h>
#include <asm/setup.h>
#include <asm/mach/arch.h>
#include <asm/mach/flash.h>
#include <asm/mach/irq.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>




//запись символа в юарт0
static void putc(int c)
{
int timeout=4000;

if (UART0_STATUS1 & 0x1E) return;
while (timeout > 0) {
if ((UART0_STATUS2 & 0x10) && ((UART0_STATUS3 & 4) == 0)) {
UART0_DATA = c;
break;
}
timeout--;
}
}

// функция printk в ЮАРТ
static void sanoprintk(struct console *co, const char *s, u_int count){
int i;
/* Пишем каждый символ */
for (i = 0; i < count; i++, s++) {
if (*s == '\n'){
putc('\r');
}
putc(*s);
}
}


static int __init sano_console_setup(struct console *co, char *options)
{
return 0;
}


/* Заполняем структуру консоли */

static struct console sano_uart_console = {
.name = "ttyS", /* Имя консоли */
.write = sanoprintk, /* Как делать printk в консоли */
// .device = uart_console_device, /* Предоставлена ядром serial */
.setup = sano_console_setup,
.flags = CON_PRINTBUFFER, /* Флаг по умолчанию */
.index = -1, /* Инициализация в неправильное значение */
};
//register_console(&sano_uart_console);


/* Инициализация консоли */

static int __init sano_uart_console_init(void)
{
/* Регистрация этой консоли */
register_console(&sano_uart_console);
return 0;
}

console_initcall(sano_uart_console_init); /* Метка инициализации консоли */

В Makefile arch части добавил obj-y += serial.o, ядро собирается и драйвер в его добавляется, но вывод сообщений в ЮАРТ не происходит.

Однако если я в файде /init/main.c добавляю свою функцию sanoprintk , а так же заполняю и инициализирую структуру static struct console sano_uart_console прямо в начале функции start_kernel, то вывод в юарт работает так как надо.
Выглядит это примерно так
CODE
#ifdef STANDALONE_DEBUG
#define putstr printf
#else

static void sanoprintk(struct console *co, const char *s, u_int count);

#include <mach/uncompress.h>
#endif

static void sanoprintk(struct console *co, const char *s, u_int count){
int i;
/* Пишем каждый символ */
for (i = 0; i < count; i++, s++) {
if (*s == '\n'){
putc('\r');
}
putc(*s);
}
}

asmlinkage void __init start_kernel(void)
{
/* Параметры каждого из поддерживаемых портов USB_UART */
/* Заполняем структуру консоли */

static struct console sano_uart_console = {
.name = "ttyS", /* Имя консоли */
.write = sanoprintk, /* Как делать printk в консоли */
.flags = CON_PRINTBUFFER, /* Флаг по умолчанию */
.index = -1, /* Инициализация в неправильное значение */
};
register_console(&sano_uart_console);



Однако, это крайне не верное решение. Подскажите пожалуйста как подключить драйвер вынесенный в отдельный файл arch части ядра.

П.С. извиняюсь за много текста, но так и не понял как запехать тег CODE под спойлер

Сообщение отредактировал Rst7 - Aug 17 2012, 12:14
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sanoend   Портирование ядра. Написал драйвер UART как корректно его подключить.   Aug 16 2012, 08:38
- - IgorKossak   Цитата(Sanoend @ Aug 16 2012, 11:38) П.С....   Aug 17 2012, 11:11
- - Idle   Цитата(Sanoend @ Aug 16 2012, 12:38) Здра...   Aug 18 2012, 12:51
- - Sanoend   IgorKossak - спасибо. Буду знать и использовать. ...   Aug 21 2012, 06:58
|- - Idle   Цитата(Sanoend @ Aug 21 2012, 10:58) Idle...   Aug 21 2012, 07:35
- - Sanoend   Я так и пробовал. К сожалению в переписке не хвата...   Aug 21 2012, 08:08
|- - Idle   Цитата(Sanoend @ Aug 21 2012, 12:08) Напр...   Aug 21 2012, 08:16
- - Sanoend   нет linux/clkdev.h берется не из mach части а из о...   Aug 21 2012, 08:59
|- - Idle   Цитата(Sanoend @ Aug 21 2012, 12:59) Не п...   Aug 21 2012, 09:05
- - Sanoend   есть ещё патч в2 http://lists.infradead.org/piperm...   Aug 21 2012, 09:18
|- - Idle   Цитата(Sanoend @ Aug 21 2012, 13:18) есть...   Aug 21 2012, 09:51
- - Sanoend   Можно чуть подробнее, что такое cherry-pick ? Как...   Aug 21 2012, 10:21
|- - Idle   Цитата(Sanoend @ Aug 21 2012, 14:21) Можн...   Aug 21 2012, 10:38
- - Sanoend   второй патч 3.2.28 Куча ошибок сборки /home/armker...   Aug 21 2012, 12:53
- - Idle   хм, а без патча собирается? он в arch/arm/kernel/s...   Aug 21 2012, 13:14
- - Sanoend   нет в suspend.c он не чего не правил. Заметил полн...   Aug 21 2012, 13:57
|- - Dron_Gus   Цитата(Sanoend @ Aug 21 2012, 17:57) CONF...   Aug 21 2012, 19:04
|- - Idle   Цитата(Sanoend @ Aug 21 2012, 17:57) Заме...   Aug 22 2012, 05:47
- - Sanoend   Idle - файлы /arch/arm/Kconfig /arch/arm/Makefile...   Aug 22 2012, 08:32
|- - Idle   Цитата(Sanoend @ Aug 22 2012, 12:32) /arc...   Aug 22 2012, 09:18
|- - Idle   Цитата(Sanoend @ Aug 22 2012, 12:32) Или ...   Aug 22 2012, 09:59
|- - Sanoend   Цитата(Idle @ Aug 22 2012, 12:59) -D__LIN...   Aug 22 2012, 10:04
|- - Idle   Цитата(Sanoend @ Aug 22 2012, 14:04) можн...   Aug 22 2012, 10:13
- - Sanoend   если поменять в конфиге CONFIG_ARCH_VERSATILE=y н...   Aug 22 2012, 09:43
- - Sanoend   Не понял ядро чего? Процессора, если так , то spmp...   Aug 22 2012, 10:43
|- - Idle   Цитата(Sanoend @ Aug 22 2012, 14:43) Не п...   Aug 22 2012, 10:50
- - Sanoend   Idle спасибо вам за помощь. Ну опубликую для истор...   Aug 22 2012, 11:44
|- - Idle   Цитата(Sanoend @ Aug 22 2012, 15:44) у ме...   Aug 22 2012, 12:22
- - Sanoend   посмотрел в ванили 3.5.х там эта функция есть. Так...   Aug 22 2012, 12:41
- - Sanoend   Ядро упорно собирается под арм версализ. Пытаюсь в...   Aug 22 2012, 14:09
- - Idle   а зачем тебе свой конфиг, выбери в дефолтном нужны...   Aug 22 2012, 16:13
- - Sanoend   Удалось собрать ядро. В данный момент запускается ...   Aug 23 2012, 05:11
- - Sanoend   Удалось запустить ядро. Прежде всего хочу поблагод...   Sep 4 2012, 06:45
- - kurtis   Я могу ошибаться, но как мне кажется, драйвер ниче...   Sep 4 2012, 08:08
- - Sanoend   Спасибо за наводку. Активность на шине посмотрю. Р...   Sep 4 2012, 08:21
- - kurtis   Я бегло глянул драйвер s1d13xxxfb.c, там походу пр...   Sep 4 2012, 09:03
|- - Idle   Цитата(kurtis @ Sep 4 2012, 13:03) Нужно ...   Sep 4 2012, 09:09
- - Sanoend   RE: Портирование ядра. Написал драйвер UART как корректно его подключить.   Sep 4 2012, 13:10
- - Sanoend   Новости и вопросы с полей. На контроллер ЛСД не по...   Sep 7 2012, 06:40


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 22:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01458 секунд с 7
ELECTRONIX ©2004-2016