Linux USB gadget 網路體驗,linuxgadget
平台:Mini2440
系統:linux-2.6.32.2
主機:Windows
配置USB gadget功能中的usbnet時,主要工作是載入g_ether.ko模組,但是試了好幾次插到電腦上,都是沒反應,windows識別不到裝置,查閱資料後才知道是USB介面的上拉問題,mini2440通過GPC5來上拉USB介面,只有這樣主機才能識別到裝置並提示安裝裝置。整合了資料後解決了問題,步驟:
開啟mach-mini2440.c添加代碼:
static void s3c2410_udc_pullup(enum s3c2410_udc_cmd_e cmd){ switch (cmd) { case S3C2410_UDC_P_ENABLE : s3c2410_gpio_cfgpin(S3C2410_GPC(5), S3C2410_GPIO_OUTPUT); s3c2410_gpio_setpin(S3C2410_GPC(5), 1); break; case S3C2410_UDC_P_DISABLE : s3c2410_gpio_setpin(S3C2410_GPC(5), 0); break; case S3C2410_UDC_P_RESET : break; default: break; }}
static struct s3c2410_udc_mach_info s3c2410_udc_cfg __initdata = {.udc_command= s3c2410_udc_pullup,};在mini2440_machine_init函數中添加一句:
static void __init mini2440_machine_init(void){#if defined (LCD_WIDTH)s3c24xx_fb_set_platdata(&mini2440_fb_info);#endifs3c_i2c0_set_platdata(NULL);s3c2410_gpio_cfgpin(S3C2410_GPC(0), S3C2410_GPC0_LEND);s3c_device_nand.dev.platform_data = &friendly_arm_nand_info;s3c_device_sdi.dev.platform_data = &mini2440_mmc_cfg;s3c24xx_udc_set_platdata(&s3c2410_udc_cfg); //添加platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices));s3c_pm_init();}在程式開頭添加#include <plat/udc.h>標頭檔後儲存關閉。
make menuconfig配置核心:Device drivers-usb support-usb gadget support
配置
注意游標處配置,容易被忽略,選擇S3C2410 USB Device Controller
配置完成儲存退出,make zImage,用新核心啟動linux。
配置命令:ifconfig usb0 172.20.21.88 up
用USB串連D型介面和Windows主機,提示安裝裝置:
驅動:http://download.csdn.net/detail/wu20093346/7914915
從列表或指定位置安裝
安裝完成後出現一個新的本地串連,修改IP,此時應該可以和mini2440板ping通:
嵌入式linux gadget開發中,usb裝置插入PC時,在裝置端怎捕捉跟主機的串連與斷開?
linux 本身就已經有支援熱插拔裝置,並在插入和拔出後調用你指定的指令碼,google裡以linux hotplug做關鍵字搜尋即可。
Linux 下的linux_usb_gadget中的g_serialko載入不上來
必須針對自己當前用的核心自己編譯模組。
必須是相同的核心版本編譯的模組。而且,gcc 編譯參數必須一樣(當然看實際情況……),還有就是如果是 gcc 3.1 之前的,gcc 版本也必須一樣。
不然就很容易出現 invalid module format