Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
Сборка модулей(драйверов)
Lavin
Добавлено 27.08.2010 14:55
0
Сообщение: 1
Lavin
2.4

Пункты: 1267
Регистрация: 22.05.2009
Пол: Мужчина
Из: Москва
Пробую собрать простейший пример драйвера на плате.(ядро 2.6.34 Debian 5.0)
Код

#define MODULE
#define __KERNEL__

#include <linux/module.h>> // определения для модуля
#include <linux/init.h> // module_init и module_exit
#include <linux/kernel.h> // printk

MODULE_AUTHOR("Mike Goblin mgoblin@mail.ru");
MODULE_DESCRIPTION("Test module for linux kernel");

int module_start()
{
printk("This is a test module startup message\n");
return 0;
}

void module_stop()
{
printk("Module is dead\n");
return;
}

module_init(module_start);
module_exit(module_stop);

Мэйкфайл
Код

PROGRAM_NAME = s65fb.so
# ****************************************
# COMPILATOR
# ****************************************

CC = gcc

#CC = $(CROSS_COMPILE)с++

# ****************************************

# FLAGS

# ****************************************

CFLAGS = -fPIC -O2 -Wall

CFLAGS += -march=armv5te -mtune=arm926ej-s

CFLAGS += -msoft-float

#CFLAGS += -fshort_wchar

CFLAGS += -s

CFLAGS += -ffunction-sections -fdata-sections

# ****************************************

# INCLUDES

# ****************************************

INCLUDES = -I. -I/media/share/linux-2.6.34/include

# ****************************************

# SOURCES

# ****************************************

SOURCE_FILES = main.c
# \

# исходник2.c

# ****************************************
# OBJECTS
# ****************************************
OBJECT_FILES = *.o
# ****************************************
# LINKER
# ****************************************
$(PROGRAM_NAME): $(OBJECT_FILES)

$(CC) -shared -o $@ $^
# $(CC) -shared -static -o $@ $^
# ****************************************
# COMPILE
# ****************************************
all: $(PROGRAM_NAME)
$(OBJECT_FILES): $(SOURCE_FILES)
$(CC) $(INCLUDES) $(CFLAGS) -c $^
# ****************************************
# CLEAR
# ****************************************
clean:
rm -f *.o
# ****************************************
# CLEAR ALL
# ****************************************
clean_all:
rm -f *.o $(PROGRAM_NAME)


у меня вылетает огромная куча ошибок на подбие тех когда что нибудь в инклюдах забудешь включить.
Что делаю не так?
Спуститься к концу Подняться к началу
Персональная информация
Hermes
Добавлено 27.08.2010 15:09 Редактировалось 27.08.2010 15:09 Сообщение: 2
Hermes
5

Пункты: 3383
Регистрация: 02.04.2010
пример работоспособного драйвера:
тут.
Спуститься к концу Подняться к началу
Персональная информация
Lavin
Добавлено 27.08.2010 15:52 Сообщение: 3
Lavin
2.4

Пункты: 1267
Регистрация: 22.05.2009
Пол: Мужчина
Из: Москва
Так это более сложное чем у меня.У меня так сказать минимум.Вопрос не в работоспособности,а как его правильно собрать,не компилируя ядро при этом.Т.е модулем и отдельно подгружать...
Спуститься к концу Подняться к началу
Персональная информация
Strijar
Добавлено 27.08.2010 18:09 Редактировалось 27.08.2010 18:09 Сообщение: 4
Strijar
Ранг
5

Группа: Клиенты
Пункты: 1618
Регистрация: 21.04.2009
Пол: Мужчина
Makefile:

Код
obj-m := drv.o

drv-objs := obj1.o obj2.o


cross.sh:

Код

#!/bin/sh

export PATH=../buildroot-2010.02/output/staging/usr/bin:${PATH}
export CROSS_COMPILE=arm-linux-

make ARCH=arm -C ../linux M=`pwd` modules
Спуститься к концу Подняться к началу
Персональная информация
Lavin
Добавлено 27.08.2010 20:42 Сообщение: 5
Lavin
2.4

Пункты: 1267
Регистрация: 22.05.2009
Пол: Мужчина
Из: Москва
Strijar
непонимаю
Цитата

Makefile:

Код
obj-m := drv.o

drv-objs := obj1.o obj2.o

такой же мэйкфайл очивидно работать не будет.
Зачем кросс компиляция,если я ясно написал что собираю на плате,а не на бб.
Спуститься к концу Подняться к началу
Персональная информация
Strijar
Добавлено 27.08.2010 22:18 Редактировалось 27.08.2010 22:20 Сообщение: 6
Strijar
Ранг
5

Группа: Клиенты
Пункты: 1618
Регистрация: 21.04.2009
Пол: Мужчина
Такой Makefile работать будет. Мало того - работает ;) А ну если вы "кросс" не собираете... то видимо месье знает толк в извращениях ;) Хотя и в таком случае этот makefile будет работать, при наличии исходников ядра.
Спуститься к концу Подняться к началу
Персональная информация
Lavin
Добавлено 27.08.2010 22:29 Редактировалось 27.08.2010 22:31 Сообщение: 7
Lavin
2.4

Пункты: 1267
Регистрация: 22.05.2009
Пол: Мужчина
Из: Москва
А куда этот мэйк класть надо? И где указывать путь к исходником ядра? В составе ядра соберет,но для этого что то там подкручивать вроде надо в Kbiult кажется...
Извращение или нет - простенькие вещи на плете собирать еще большой вопрос.Заходишь по ssh открываешь mc текстовый редактор с хорошей подсветкой синтаксиса и пишешь.Редактов в mc родной меня полностью устраивает.Не спорю что может vim лучше но я недорос до него еще.Компилишь и тут же запускаешь.Ненужно копировать файл на плату и с версиями библиотек проблем куда меньше становится.Конечно rootfs у меня порядка 1.5гб сейчас...
Спуститься к концу Подняться к началу
Персональная информация
Lavin
Добавлено 28.08.2010 10:46 Сообщение: 8
Lavin
2.4

Пункты: 1267
Регистрация: 22.05.2009
Пол: Мужчина
Из: Москва
Разобрался.Может кому полезно будет собирать драйвера вне составе ядра.
Все очень просто и тривиально.Есть хорошая статья
Вроде никаких замечаний нет,единственно нужны исходники того ядра что стоит,а не исходников из репов дебиана..
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux