2013-07-12 52 views
11

Tôi có ứng dụng Linux mà tôi muốn tự động hóa một số kiểm tra và trạng thái của nó sẽ thay đổi tùy thuộc vào trạng thái của một số thiết bị nhất định, tức là thiết bị USB, thiết bị WLAN, thiết bị WAN. Tuy nhiên, chúng tôi không còn có các thiết bị USB, WLAN, WAN, v.v. theo ý của mình, vì vậy tôi cần tìm ra cách để thử nghiệm chương trình này mà không thực sự cắm vào thiết bị vật lý, bật/tắt, v.v.Giả lập thiết bị USB vật lý Linux

Tôi bắt đầu bằng cách tạo một thiết bị USB ảo mà tôi có thể điều khiển từ không gian người dùng, nhưng có một sự thiếu hiểu biết cơ bản về phía tôi ngăn cản tôi lấy bất kỳ chủ đề tương tự nào trên các diễn đàn này và áp dụng chúng cho dự án của tôi. Tôi cảm thấy như tôi sẽ cần phải tạo ra một số loại trình điều khiển USB ảo, và sau đó có nó giao tiếp với một số chương trình cấp người dùng chứ không phải là usbfs. Tuy nhiên, ngay cả khi tôi tạo trình điều khiển ảo này, làm cách nào để "cắm vào" thiết bị này từ không gian người dùng và đăng ký chương trình của tôi với trình điều khiển cụ thể này? Là những gì tôi đang cố gắng làm thậm chí có thể?

Trả lời

0

Bạn có thể kiểm tra ứng dụng của mình trong môi trường ảo bằng VMWare không? Sau đó, bạn có thể "cắm" bất kỳ thiết bị ảo nào trên máy chủ của bạn vào máy khách và kiểm tra ứng dụng của bạn theo cách đó.

+0

Không, tiếc là tất cả tôi không có loại quyền truy cập vào mã, tất cả những gì tôi có thể làm là thêm các mô-đun hạt nhân và chạy các ứng dụng thử nghiệm.Các thử nghiệm được chạy trên một máy chủ từ xa –

8

Cách tốt nhất là sử dụng Trình điều khiển và phần cứng Tiện ích Linux cho phép bạn trở thành thiết bị USB. Trình điều khiển tiện ích cho phép máy tính "giả vờ" là bất kỳ loại thiết bị nào. Sau đó, hệ thống của bạn được thử nghiệm có một cáp USB OTG duy nhất để hộp tiện ích. Bạn thậm chí không cần phải rút cáp nếu hộp tiện ích của bạn có phần cứng phù hợp. "Hộp tiện ích" có thể là máy tính để bàn/máy tính xách tay chạy Linux (nếu nó hỗ trợ USB OTG) hoặc thậm chí là điện thoại Android hoặc Raspberry Pi. (Ghi chú rằng USB cáp hút Chỉ vì sự phù hợp cáp không có nghĩa là nó có dây một cách chính xác cho USB OTG..)

Một khi bạn có phần cứng USB OTG đúng, hộp tiện ích của bạn là tất cả phần mềm:

1) Nếu thiết bị của bạn đang được thử nghiệm hỗ trợ OTG, hãy đảm bảo rằng hộp tiện ích của bạn KHÔNG cố gắng và trở thành một máy chủ lưu trữ USB. (Sau đó, thiết bị của bạn đang được thử nghiệm sẽ trở thành một máy khách USB.) I.e. đảm bảo những thứ như usb_storage không được tải tự động.

2) Ngoài hộp, hạt nhân hỗ trợ các tiện ích cho USB Hub, USB Ethernet, cổng USB và cổng USB. Chỉ cần tải các mô-đun phù hợp trên hộp tiện ích của bạn và nó "chỉ hoạt động". Ví dụ: để tạo thanh USB, hãy thực hiện như sau: "insmod g_file_storage.ko file=/dev/ram0". Phía xa sẽ nghĩ rằng bạn cắm vào một thanh USB.

Đối với thiết bị nối tiếp, tiện ích của bạn có thể chạy mã sử dụng không gian mà "nhặt điện thoại" trên/dev/USBx" và nói chuyện với điện thoại của bạn được kiểm tra. (Có lẽ bắt chước một modem 4G hay bất cứ điều gì.)

Tấn thiết bị thực sự là "nối tiếp USB" dưới mui xe vì nhà sản xuất quá lười biếng để hiểu USB.

3) Với một chút biên dịch lại hoặc cấu hình, bạn có thể có các Thiết bị Tiện ích chung đó giả vờ là USB khác nhau ID hoặc trả về các chuỗi nhà cung cấp khác nhau, v.v. Điều này sẽ không giống như "kiểm tra đối với phần cứng thực", nhưng ít nhất bạn đang thử nghiệm với phiên bản chung của các thiết bị này.

4) Đối với các loại thiết bị chưa có trong hạt nhân (tức là WiFi hoặc thứ gì đó), bạn đang sử dụng riêng. Với đủ mồ hôi máu và nước mắt, bạn có thể sử dụng viết loại tiện ích của riêng bạn. (Lý tưởng nhất, giữ càng nhiều càng tốt trong không gian người dùng, và chỉ xử lý các phần quan trọng về hiệu năng trong hạt nhân ..)

Hãy coi chừng: không thể hiểu và đánh giá đồng thời USB.

+1

Điều này sẽ hoàn hảo nếu tôi có quyền truy cập vật lý vào hệ thống thử nghiệm; Thật không may tôi không. Tuy nhiên, các trình điều khiển tiện ích Linux có thể có ích ... Tôi có kế hoạch viết một trình điều khiển USB, khi khởi tạo, tự động đăng ký một thiết bị USB ảo phản chiếu thiết bị, cấu hình và các bộ mô tả giao diện được tìm thấy trong nguồn tiện ích Linux. Có thể làm việc này? –

+0

trông giống như mô-đun hạt nhân đã được đổi tên thành 'usb_f_mass_storage.ko'. xem [link] (https://github.com/torvalds/linux/blob/master/Documentation/usb/gadget-testing.txt) – netvope

Các vấn đề liên quan