Simon_ce 2015-12-03 07:26 采纳率: 0%
浏览 1398

linux usb从设备加密问题

我想实现一个嵌入式的linux设备,带sd卡,默认情况下在usb连接电脑后不能打开嵌入式设备上的sd卡文件,在设备端设置过后才可以打开,或者在电脑上位机端输入密码后才能打开。请问这个在嵌入式linux设备端怎么去实现?谢谢

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 22:44
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    Linux内核支持USB驱动,你可以使用usb-hid设备来控制SD卡的访问权限。

    以下是一个简单的示例,展示了如何使用usb-hid设备和usb-storage设备来控制SD卡的读写:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define USB_HID_VENDOR_ID 0x1809 // SD Card vendor ID
    #define USB_HID_PRODUCT_ID 0x5004 // SD Card product ID
    
    int main() {
        struct hid_device *dev;
        int ret;
    
        /* Create a new HID device */
        dev = hid_new(NULL);
        if (dev == NULL) {
            printf("Failed to create HID device\n");
            return -1;
        }
    
        /* Add the HID device to the system */
        ret = hid_register(dev, &hid_hid_dev);
        if (ret != 0) {
            hid_free(dev);
            printf("Failed to register HID device: %s\n", hid_error(ret));
            return -1;
        }
    
        /* Open the HID device */
        hid_device_open(dev);
    
        /* Set up the USB driver for the HID device */
        ret = hid_driver_setup(&hid_driver, USB_HID_VENDOR_ID, USB_HID_PRODUCT_ID);
        if (ret != 0) {
            hid_device_close(dev);
            hid_free(dev);
            printf("Failed to setup USB driver: %s\n", hid_error(ret));
            return -1;
        }
    
        /* Start the USB driver */
        ret = hid_driver_start();
        if (ret != 0) {
            hid_device_close(dev);
            hid_free(dev);
            printf("Failed to start USB driver: %s\n", hid_error(ret));
            return -1;
        }
    
        /* Wait for the USB driver to be ready */
        while (!hid_driver_ready()) {}
    
        /* Enable USB storage support on the HID device */
        hid_storage_enable(dev, 0); // Enable block access mode
    
        /* Read from the SD card */
        uint8_t buffer[2] = {0};
        ret = hid_read(dev, buffer, sizeof(buffer), 10000);
        if (ret != 0) {
            printf("Failed to read from SD card: %s\n", hid_error(ret));
            hid_storage_disable(dev);
            hid_device_close(dev);
            hid_free(dev);
            return -1;
        }
        printf("Read from SD card: %d\n", buffer[0]);
    
        /* Write to the SD card */
        ret = hid_write(dev, buffer, sizeof(buffer), 10000);
        if (ret != 0) {
            printf("Failed to write to SD card: %s\n", hid_error(ret));
            hid_storage_disable(dev);
            hid_device_close(dev);
            hid_free(dev);
            return -1;
        }
        printf("Written to SD card: %d\n", buffer[0]);
    
        /* Disable USB storage support on the HID device */
        hid_storage_disable(dev);
    
        /* Free the HID device */
        hid_free(dev);
    
        return 0;
    }
    

    这段代码首先创建了一个新的HID设备,并添加到系统中。然后,它设置了USB驱动器以用于HID设备,开始USB驱动程序,等待其准备好。接着,它打开了HID设备并启动了USB驱动程序。最后,它开始读取和写入SD卡。

    请注意,这只是一个基本的示例,实际应用可能需要更复杂的错误处理、安全检查和其他功能。此外,你还需要确保你的硬件能够正确地识别和响应这些命令。

    评论

报告相同问题?