日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

嵌入式linux, CAN 驱动有关问题

發(fā)布時(shí)間:2024/9/3 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式linux, CAN 驱动有关问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

與can相關(guān)的文件有

1. linux3.0.1源碼包中的:

drivers/net/can/mcp251x.c與Kconfig文件(將mcp251x.c中spi_board_info[] 中的.modalias="mcp2510"設(shè)為"mcp2515")是不是此處原因待查!

drivers/spi/spi_s3c64xx.c

net/can 所有文件

Document/spi

Document/can.txt 有關(guān)于socket CAN 編程的相關(guān)知識(shí)

2. linux 3.0.1系統(tǒng)中的相關(guān)操作

ifconfig

不出現(xiàn)can0網(wǎng)卡

more /proc/net/dev

有can0網(wǎng)卡

ifconfig can0 up

出現(xiàn)

[root@FORLINX6410]# ifconfig can0 up
mcp2515 spi1.0: bit-timing not yet defined? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???
mcp2515 spi1.0: unable to set initial baudrate!

根據(jù)linux3.0.1用戶手冊進(jìn)行波特率設(shè)置

?up link set can0 up type can bitrate 250000

ifconfig

出現(xiàn)can0網(wǎng)卡

ifconfig can0 up

之后根據(jù)Document/can.txt 有關(guān)于socket CAN 編程的相關(guān)知識(shí)進(jìn)行網(wǎng)絡(luò)編程。

?


但是在開發(fā)板/dev目錄下始終沒有生成spi設(shè)備文件?????why??????

使用linux自帶的spi_s3c24xx.c驅(qū)動(dòng)后,/dev無法找到自動(dòng)創(chuàng)建的接點(diǎn),/proc/devices中也沒有,但是把spidev.c文件編譯模塊后,/proc/devices中就有了major=153的設(shè)備了

?spi_s3c24xx.c本身并沒有生成設(shè)備節(jié)點(diǎn),spidev.c的任務(wù)就是為了再user?space訪問spi設(shè)備而設(shè),就是通過它來進(jìn)行spi設(shè)備的讀寫。詳細(xì)方法請閱讀內(nèi)核Documents/spi目錄下的例子。


?在加載spidev.ko后,生成spidev0.1?153?0接點(diǎn)了

附外解決方法:(參考)

1、在配置Linux?編譯選項(xiàng)時(shí),開啟相應(yīng)的SPI?選項(xiàng),如下所示?
????->?Device?Drivers?
??????->?SPI?support?
???????SPI?support?
??????????***?SPI?Master?Controller?Drivers?***?
??????-*-?Bitbanging?SPI?master?
??????<*>?Samsung?S3C24XX?series?SPI?
??????<?>?Samsung?S3C24XX?series?SPI?by?GPIO?
??????????***?SPI?Protocol?Masters?***?
??????<?>?SPI?EEPROMs?from?most?vendors?
??????<*>?User?mode?SPI?device?driver?support?
??????<?>?Infineon?TLE62X0?(for?power?switching)?
設(shè)置完成保存。

2.驅(qū)動(dòng)文件mcp251x.c?mcp251x.h?can.h

文件mcp251x.c放在目錄drivers/net/can/下;

文件mcp251x.h放在目錄include/linux/can/platform/下;

文件can.h放在目錄include/linux/can/

3.添加配置文件drivers/net/can/Kconfig

在文件中添加

config?CAN_MCP251X

tristate?"Microchip?251x?series?SPI?CAN?Controller"

depends?on?CAN?&&?SPI

default?N

---help---

??Say?Y?here?if?you?want?support?for?the?Microchip?251x?series?of

??SPI?based?CAN?controllers.

4.在drivers/net/can/Makefile文件中添加編譯文件

obj-$(CONFIG_CAN_MCP251X)?+=?mcp251x.o

5.?修改文件arch/arm/mach-s3c2410/mach-smdk2410.c中添加spi板級啟動(dòng)信息
#include?<linux/spi/spi.h>
#include?<asm/arch/spi.h>???????//包含s3c2410_spi_info結(jié)構(gòu)體

#include?<linux/can/platform/mcp251x.h>??//包含struct?mcp251x_platform_data結(jié)構(gòu)體

static?struct?mcp251x_platform_data?mcp251x_info?=?{

????????.f_osc?=?16000000,

????????//.oscillator_frequency?=?19000000,

????????//.board_specific_setup?=?myboard_mcp251x_initfunc,

????????//.device_reset?=?myboard_mcp251x_reset,

????????//.transceiver_enable?=?NULL,

};

static?struct?spi_board_info?spi_board_info[]?__initdata?=?{

[0]=

{

????????.modalias???????=?"mcp251x",?//這個(gè)名稱一定要與mcp251x.c驅(qū)動(dòng)中

//proc函數(shù)中的.name要一致

????????.platform_data??=?&mcp251x_info,??//上面的結(jié)構(gòu)體

????????.irq??????????????=?IRQ_EINT3,????????????中斷端口號

????????.max_speed_hz??=?8000000,????????????//spi最大的速度

????????.bus_num????????=?0,????????????//spi01中選擇spi0

????????.chip_select??????=?0,????????????//多個(gè)芯片選擇

},

};

static?struct?s3c2410_spi_info?s3c2410_spi0_platdata?=?{

????????.pin_cs?=?S3C2410_GPG2,?????//片選端口指定

????????.num_cs?=?1,??????????????????//總共端口數(shù)

???????//?.bus_num?=?0,

};?

smdk2410_devices數(shù)組中添加
&s3c_device_spi0
smdk2410_init函數(shù)中添加
s3c_device_spi0.dev.platform_data=?&s3c2410_spi0_platdata;
spi_register_board_info(spi_board_info,?ARRAY_SIZE(spi_board_info));

4.重新編譯內(nèi)核

啟動(dòng)信息中有如下內(nèi)容,說明成功了:

?

5?執(zhí)行命令cat?/proc/devices

顯示252?mcp251x

??添加設(shè)備文件?mknod?/dev/mcp251x?c?252?0(主次設(shè)備號參照 /drivers/spi/spidev.c ?MAJOR:153 MINOR:32-256 )

執(zhí)行應(yīng)用程序

./can_test

顯示如下


?基本完成,接下來是接上硬件調(diào)試了。

總結(jié)

以上是生活随笔為你收集整理的嵌入式linux, CAN 驱动有关问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。