Sanoend 0 16 августа, 2012 Опубликовано 16 августа, 2012 (изменено) · Жалоба Здравствуйте. Я пытаюсь портировать ядро линукс на процессор SPMP8000 (основан на arm926). Я написал свой драйвер ЮАРТ (пока сильно упрощенный вариант). Вот код драйвера: #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, то вывод в юарт работает так как надо. Выглядит это примерно так #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 под спойлер Изменено 17 августа, 2012 пользователем Rst7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 17 августа, 2012 Опубликовано 17 августа, 2012 · Жалоба П.С. извиняюсь за много текста, но так и не понял как запехать тег CODE под спойлер Вместо тэга CODE надо использовать CODEBOX (при размере кода более 10 строк). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 18 августа, 2012 Опубликовано 18 августа, 2012 · Жалоба Здравствуйте. Я пытаюсь портировать ядро линукс на процессор SPMP8000 (основан на arm926). здравствуйте, всё спортировано до нас http://lists.infradead.org/pipermail/linux...ber/068699.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanoend 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба IgorKossak - спасибо. Буду знать и использовать. Idle - да я видел это. Но не смог найти где скачать эти файлы. Всё что можно я даже выдернул из общехо хода переписки в той рассылке, но там многого не хватает. В ванильном ядре присутствует строка в arch/arm/tools/mach-types letcool MACH_LETCOOL LETCOOL 3617 но больше нету не чего. Даже в arch/arm/Makefile отсутствует machine-$(CONFIG_ARCH_LETCOOL) не говоря уже об arch/arm/mach-spmp8000/ и т.д. я пробовал писать Zoltan Devai. Может быть я что-то не понимаю. И вы мне подскажите где добыть патч для этой платформы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба Idle - да я видел это. Но не смог найти где скачать эти файлы. файлы разбиты на 9 писем в этом треде, из письма копипасти в файл - это и будет патч В ванильном ядре присутствует строка в arch/arm/tools/mach-types ну правильно, не включили же ничего, парень спортировал, запостил патч для того ядра, для которого писал, ему показали что не так и всё на этом выясни ядро, на которое лягут патчи и собери, потом, если надо будет - портируй патчи на более свежее Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanoend 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба Я так и пробовал. К сожалению в переписке не хватает некоторых файлов. Например, clkdev.h на него есть ссылка в clkdev.c но самого это файла нету. И т.д. примерно после 40-50 пересборок с лечением ошибок я сдался. Сколько там их всего я не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба Например, clkdev.h на него есть ссылка в clkdev.c так это #include <linux/clkdev.h>, его и не должно там быть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanoend 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба нет linux/clkdev.h берется не из mach части а из общих инклайдов. Я возможно перепутал название файлов т.к. в действительности #include <mach/clkdev.h> я сейчас не вижу. Но я точно помню, что каких-то файлов не хватало. Хотя возможно я где-то совершил ошибку. Думаю стоит попробовать ещё раз. Не подскажите как определить под какую версию ядра писался этот патч. Переписка датируется "Sun Oct 9 12:36:04 EDT 2011" я исходил из этого и брал последнее на тот момент ядро. Но мне кажется я ошибся. П.С. Спасибо большое за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба Не подскажите как определить под какую версию ядра писался этот патч. Переписка датируется "Sun Oct 9 12:36:04 EDT 2011" я исходил из этого и брал последнее на тот момент ядро. не знаю, я бы тоже взял последнее на тот момент Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanoend 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба есть ещё патч в2 http://lists.infradead.org/pipermail/linux...ber/070007.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба есть ещё патч в2 http://lists.infradead.org/pipermail/linux...ber/070007.html а, этот товарищ у кого-то сделал cherry-pick, попробуй тогда на ванильное 3.2 наложить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanoend 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба Можно чуть подробнее, что такое cherry-pick ? Какой патч мне надо наложить? Нужно сначала собрать всё из сообщений первого патча, потом добавить к нему из второго патча, а потом накладывать на ванильное 3.2 ? П.С. всегда такие сложности по сборке патчей из кучи писем? Не проще ли разработчику организовать что-то вроде git в котором будет и чистое ядро и пропатченое. Так можно будет скачивать и сразу патченое ядро и даже автоматом получать файл патча. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 21 августа, 2012 Опубликовано 21 августа, 2012 (изменено) · Жалоба Можно чуть подробнее, что такое cherry-pick ? он там когда разрабатывал, дёрнул один патч из девелоперской ветки разработчика системы прерываний Какой патч мне надо наложить? Нужно сначала собрать всё из сообщений первого патча, потом добавить к нему из второго патча, а потом накладывать на ванильное 3.2 ? нет, сразу бери v2, сохраняй 5 писем в 5 файлов с патчами и накладывай (текст письма можно даже не удалять) на ванильное 3.2 П.С. всегда такие сложности по сборке патчей из кучи писем? не знаю, беру обычно из коммитов Изменено 21 августа, 2012 пользователем Idle Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanoend 0 21 августа, 2012 Опубликовано 21 августа, 2012 · Жалоба второй патч 3.2.28 Куча ошибок сборки /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c: In function ‘cpu_suspend’: /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c:42:32: error: dereferencing pointer to incomplete type /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c:56:3: error: implicit declaration of function ‘cpu_switch_mm’ /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c:57:3: error: implicit declaration of function ‘local_flush_tlb_all’ /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c: In function ‘cpu_suspend_init’: /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c:65:2: error: implicit declaration of function ‘pgd_alloc’ /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c:65:27: error: ‘init_mm’ undeclared (first use in this function) /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c:65:27: note: each undeclared identifier is reported only once for each function it appears in /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c:68:3: error: implicit declaration of function ‘identity_mapping_add’ /home/armkernel/source/patchtest/linux-3.2.28/arch/arm/kernel/suspend.c:68:50: error: ‘SECTION_SIZE’ undeclared (first use in this function) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Idle 0 21 августа, 2012 Опубликовано 21 августа, 2012 (изменено) · Жалоба хм, а без патча собирается? он в arch/arm/kernel/suspend.c что-то правил? упд под другую какую-нибудь борду с тем же ядром в soc у тебя собирается? Изменено 21 августа, 2012 пользователем Idle Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться