Добрый день!
Сегодня провозился с настройкой драйвера CAN mcp2515, но застрял на последнем шаге, после которого уже можно слушать CAN-интерфейс, как сетевой.
Исходные данные: at91sam9g45, linux 3.2.18.
Что имею на данный момент:
1. Ядро скомпилировано с Microchip MCP251x SPI controllers, Can bit-timing calculation и Raw Can protocol
2. В файле борды написано:
static struct mcp251x_platform_data mcp251x_info =
{
.oscillator_frequency = 24000000,
// .board_specific_setup = NULL,
// .power_enable = NULL,
// .transceiver_enable = NULL,
};
{ /* CAN */
.modalias = "mcp2515",
.platform_data = &mcp251x_info,
.mode = SPI_MODE_0,
.chip_select = 2,
.max_speed_hz = 2 * 1000 * 1000,
.bus_num = 0,
.irq = gpio_to_irq(AT91_PIN_PB22),
},
3. В dmesg пишут:
CAN device driver interface
mcp251x spi0.2: CANSTAT 0x80 CANCTRL 0x07
mcp251x spi0.2: probed
4. В interfaces запись не делал, ибо пока и разово не работает, поэтому на перезагрузке говорю:
/sbin/ip link set can0 type can bitrate 125000 triple-sampling on
команда проходит (с ip из busybox, естественно, не работало).
финал уже близок:
/sbin/ifconfig can0 up, а в ответ получаю:
ifconfig: SIOCSIFFLAGS: Invalid argument
Интерфейс can0 остается down и я себя чувствую тем же)
Что делал:
1. Читал переписку sasamy -
http://electronix.ru/forum/lofiversion/index.php/t105908.html. Там все относится к ветке 2.6, и проблема решилась обновлением драйвера. Возможно есть драйвер (патч?) для третьей ветки?
2. Вскользь смотрел исходники драйвера mcp251x.c - не увидел там обработки вызовов через ioctl, а именно эту функции, как я понимаю, вызывает ifconfig? Вполне вероятно что я заблуждаюсь.
Если кто-то ответит, то буду очень признателен, т.к. работать с mcp2515 через spidev желания немного.
Спасибо.