精华内容
下载资源
问答
  • Hardware

    2017-12-01 09:07:14
    Ola Clason’s Hardware store is an old company where most work is done “the old way”. Among other things, the company is the one and only provider of marble house numbers. These house numbers have ...
  • hardware

    2015-05-19 20:50:53
    资源页
    资源页
    
    展开全文
  • <div><p>It would be great to add an api that we could use to get hardware specific information. Some of these may include 1. Mac Addresses 2. Processor Information 3. Graphic card Information 4. Base...
  • Notebook Hardware Control

    2016-03-20 17:26:15
    Notebook Hardware ControlNotebook Hardware Control
  • Erma Hardware Factory - Pocket Knife - Hunting Knife - Outdoor Tools - Hardware
  • Computer Hardware

    2018-05-06 07:28:00
    Computer hardware can be divides into four categories: input hardware, storage-hardware, processing hardware, and output hardware. 生词: hardware 硬件 category 种类,类别 process 处理 ...

    Computer Hardware

    Para 1

    Computer hardware can be divides into four categories: input hardware, storage-hardware, processing hardware, and output hardware.

    生词:

    hardware 硬件

    category 种类,类别

    process 处理

    计算机硬件能被分为四类:输入硬件,存储硬件,处理硬件和输出硬件。

    Para 2 Input Hardware

    The purpose of input hardware is to collect data and convert it into a form suitable for computer processing. The most common input device is a keyboard. It looks very much like a typewriter keyboard. Its key are arranged in the typical typewriter layout. There are also a number of additional keys. They can be used to enter special computer-related codes. Although it isn't the only type of input device available, the computer keyboard is the one which is most generally used by the business community.

    生词:

    form 格式;形式;形状;样子

    suitable 合适的

    additional 额外的

    输入硬件的目的是收集信息并将其转化为能被计算机处理的合适的格式。最常见的输入设备是键盘。它看起来和打字机键盘很像。它的按键采用打字机的布局,但也有许多额外的按键。它们能被用来输入特殊的与计算机相关的编码。尽管它不是唯一的输入设备,但它是被商业街界使用的最广泛的。

    para 3 Storage Hardware

    The purpose of storage hardware is to provide a means of storing computer instructions and data in a form that is relatively permanent, that is, the data is not lost when the power is turned off and easy to retrieve when needed for processing. Storage hardware serves the same basic function as do office filing systems except that it stores data as electromagnetic signals or laser-etched spots, commonly on disk or tape, rather than on paper.

    生词:

    relatively adv. 相当地;相对地,比较地

    permanent adj. 永久的,永恒的;不变的

    retrieve vt. [计] 检索;恢复;重新得到 vi. 找回猎物 n. [计] 检索;恢复,取回

    electromagnetic adj. 电磁的

    存储硬件是用来提供一种相对长久的形式存储计算机指令和数据的手段,就是当断电时,数据不会丢失,并且在需要处理时轻松地检索出来。存储硬件和办公文档系统发挥的作用几乎一样,差别在于存储硬件将数据以电磁信号或激光蚀刻点的形式存放在磁盘或者磁带上,而不是印在纸上。

    Para 4 Processing Hardware

    The purpose of processing hardware is to retrieve, interpret, and direct the execution of software instructions which are provided to the computer. The most common components of processing hardware are the central processing unit and main memory.

    生词:

    interpret vt. 说明;口译 vi. 解释;翻译

    direct adj. 直接的;直系的;亲身的;恰好的 vt. 管理;指挥;导演;指向 vi. 指导;指挥 adv. 直接地;正好;按直系关系

    execution n. 执行,实行;完成;死刑

    central adj. 中心的;主要的;中枢的 n. 电话总机

    处理硬件的目的是检索,解释提供给计算机的软件指令并指导这些指令的执行。处理硬件的常见部件是中央处理器和主存储器。

    Para 5

    The central processing unit(CPU) is the brain of the computer. It reads and interprets software instructions and coordinates the processing activities that must take place. The design of the CPU affects the processing power and the speed of the computer, as well as the amount of main memory it can use effectively. With a well-designed CPU in your computer, you can perform highly sophisticated tasks in a very short time.

    生词:

    coordinate vt. 调整;整合 vi. 协调

    sophisticated adj. 复杂的;精致的;久经世故的;富有经验的

    中央处理器(CPU)是计算机的大脑。它读取和解释软件指令,并且协调必须执行的运算命令。CPU的设计影响了计算机的处理能力和处理速度,也会影响主存储器的处理效率。假如有一个设计良好的CPU在你的计算机中,你可以在短时间内高效地完成复杂的任务。

    Para 6

    Main memory (also called internal memory, primary storage, or just memory) can be thought of as an electronic desktop. The more desk surface you have in front of you, the more you can place on it. Similarly, if your computer has a lot of memory, you can place more software instructions in it. The amount of memory available determines whether you can simple or sophisticated software; a computer with a large memory is more capable of holding the thousands of instructions that are contained in the more sophisticated software programs. A large memory also allows you to work with and manipulate great amounts of data and information at one time. Quite simply, the more main memory you have in your computer, the more you can accomplish.

    生词:

    electronic adj. 电子的 n. 电子电路;电子器件

    surface n. 表面;表层;外观 adj. 表面的,肤浅的 vi. 浮出水面 vt. 使浮出水面;使成平面

    determine v. (使)下决心,(使)做出决定 vt. 决定,确定;判定,判决;限定 vi. 确定;决定;判决,终止;[主用于法律]了结,终止,结束

    manipulate vt. 操纵;操作;巧妙地处理;篡改

    主存储器(也叫做内部存储器,主存或者就是内存)能被认作是一个电子桌面。你前面的桌面越大,你能放置的东西就越多。类似的,假如你的计算机有很大的内存,你就能放置更多的软件指令在里边。可供使用的内存总量决定你是否能使用简单的或者复杂的软件;内存大的计算机能容纳复杂软件程序中的数千条指令。大内存也允许你在同一时间使用和操纵大量的数据和信息。简单地说,你的计算机的主存储器越大,你能做的事越多。

    Para 7 Output Hardware

    The purpose o output hardware is to provide the user with the means to view information produced by the computer system. Information is output in either hardcopy or softcopy form. Hardcopy output can be held in your hand——examples are paper with text(words or numbers) or graphics printed on it. Softcopy output is displayed on a monitor, a television-like screen on which you can read text and graphics.

    生词:

    hardcopy n.硬拷贝

    softcopy n.软拷贝

    graphics adj. 形象的;图表的;绘画似的

    输出硬件的目的是为了提供给用户看见计算机系统处理过的信息的方法。信息输出不是通过硬拷贝就是通过软拷贝的形式。硬拷贝能被你亲手拿着,如印有文本(文字或数字)或者图像的纸张。软拷贝仅在显示器上显示出来,显示器就像电视机屏幕一样,你可以在这上面看到文本和图像。

    转载于:https://www.cnblogs.com/wyloving/p/8997214.html

    展开全文
  • 深度学习Hardware Software

    万次阅读 2019-12-14 13:18:47
    Hardware Software TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems (2016), M. Abadi et al. (Google) [pdf] TensorFlow: a system for large-scale machine learning, by Martí...

    Hardware Software

    • TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems (2016), M. Abadi et al. (Google) [pdf]
    • TensorFlow: a system for large-scale machine learning, by Martín A., Paul B., Jianmin C., Zhifeng C., Andy D. et al. (2016) (Cited: 2,227) [pdf] TensorFlow supports a variety of applications, with a focus on training and inference on deep neural networks. Several Google services use TensorFlow in production, we have released it as an open-source project, and it has become widely used for machine learning research.
    • MatConvNet: Convolutional neural networks for matlab (2015), A. Vedaldi and K. Lenc [pdf] It exposes the building blocks of CNNs as easy-to-use MATLAB functions, providing routines for computing linear convolutions with filter banks, feature pooling, and many more. This document provides an overview of CNNs and how they are implemented in MatConvNet and gives the technical details of each computational block in the toolbox.
    • Caffe: Convolutional architecture for fast feature embedding (2014), Y. Jia et al. [pdf]
    • Theano: A Python framework for fast computation of mathematical expressions., by by Rami A., Guillaume A., Amjad A., Christof A. et al (2016) (Cited: 451) [pdf] Theano is a Python library that allows to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently. Since its introduction, it has been one of the most used CPU and GPU mathematical compilers especially in the machine learning community and has shown steady performance improvements.
    • Theano: new features and speed improvements (2012), F. Bastien et al. (Bengio) [pdf]
    • Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning, by Christian S., Sergey I., Vincent V. & Alexander A A. (2017) (Cited: 520) [pdf] Very deep convolutional networks have been central to the largest advances in image recognition performance in recent years. With an ensemble of three residual and one Inception-v4, we achieve 3.08% top-5 error on the test set of the ImageNet classification (CLS) challenge.
    展开全文
  • hardware stream prefetcher

    2017-06-18 19:21:05
    hardware stream prefetcher , gem5 平台
  • The Hardware Hacker Adventures in Making and Breaking Hardware 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
  • The Hardware Hacker Adventures in Making and Breaking Hardware 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
  • Hardware概述

    2018-04-19 14:37:57
    不管是出于什么样地考虑,android系统终究是提供了hardware层来封装了对Linux的驱动的访问,同时为上层提供了一个统一的硬件接口和硬件形态。一.Hardware概述在Hardware层中的一个模块中,主要设计一下三个结构:...

    不管是出于什么样地考虑,android系统终究是提供了hardware层来封装了对Linux的驱动的访问,同时为上层提供了一个统一的硬件接口和硬件形态。

    一.Hardware概述

    在Hardware层中的一个模块中,主要设计一下三个结构:

    struct hw_module_t struct hw_module_methods_t struct hw_device_t
    这三个结构体的关系是这样的:我们在上层访问linux驱动时,需要首先获得hardware层的对应的module,使用hw_get_module()方法实现,这个函数通过给定模块的ID来寻找硬件模块的动态链接库,找到后使用load()函数打开这个库,并通过一个固定的符号:HAL_MODULE_INFO_SYM寻找hw_module_t结构体,我们会在hw_module_t结构体中会有一个methods属性,指向hw_module_methods_t结构体,这个结构体中会提供一个open方法用来打开模块,在open的参数中会传入一个hw_device_t**的数据结构,这样我们就可以把对模块的操作函数等数据保存在这个hw_device_t结构中,这样,这样用户可以通过hw_device_t来和模块交互。
    具体的说,我们在上层可以这样调用HAL层的module:
    xxx_module_t *module;
    hw_get_module(XXXID,(struct hw_module_t **)&module);
    以上两步我们就获得了对应ID的 hw_module_t结构体。
    struct xxx_device_t *device;
    module->methods->open(module,XXXID,(struct hw_device_t **)&device);
    这样我们就获得了hw_device_t结构体,通过hw_device_t结构体我们就可以访问HAL层对应的module了。
    这个思路很重要,后面我们测试我们的HAL层module的时候,就需要上面的代码。
    整个过程可用一张图展示:
    这里写图片描述

    二.使用Android HAL规范封装对Linux驱动的访问

    在hardware/libhardware/modules新建hellotest目录,添加两个文件:hellotest.c 和 Android.mk

    1.hellotest.c

    这个文件把对linux驱动的访问封装成了Android要求的格式。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #include <hardware hardware.h=""
    #include <hardware hellotest.h=""
    #include <fcntl.h> 
    #include <errno.h> 
    #include <cutils log.h=""
    #include <cutils atomic.h=""
     
    #define DEVICE_NAME "/dev/hello"
    #define MODULE_NAME "HelloTest" 
    #define MODULE_AUTHOR "jinwei"
     
    #define LOG_TAG "HelloTest" 
     
    /* 定义LOG */
    #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
    #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG, __VA_ARGS__)
    #define LOGI(...) __android_log_print(ANDROID_LOG_INFO  , LOG_TAG, __VA_ARGS__)
    #define LOGW(...) __android_log_print(ANDROID_LOG_WARN  , LOG_TAG, __VA_ARGS__)
    #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , LOG_TAG, __VA_ARGS__)
     
     
    /*打开和关闭设备的方法*/ 
    static int hellotest_device_open(const struct hw_module_t* module, const char* name, struct hw_device_t** device); 
    static int hellotest_device_close(struct hw_device_t* device); 
     
    /*读写linux驱动的接口*/ 
    static int hellotest_write_string(struct hellotest_device_t* dev, char * str); 
    static int hellotest_read_string(struct hellotest_device_t* dev, char **str); 
     
    /*模块方法结构体*/ 
    static struct hw_module_methods_t hellotest_module_methods = { 
        open: hellotest_device_open 
    }; 
     
    /*模块实例变量*/ 
    struct hellotest_module_t HAL_MODULE_INFO_SYM = { 
        common: { 
            tag: HARDWARE_MODULE_TAG, 
            version_major: 1
            version_minor: 0
            id: HELLOTEST_HARDWARE_MODULE_ID, 
            name: MODULE_NAME, 
            author: MODULE_AUTHOR, 
            methods: &hellotest_module_methods, 
        
    }; 
     
    static int hellotest_device_open(const struct hw_module_t* module, const char* name, struct hw_device_t** device) { 
        struct hellotest_device_t* dev;
        dev = (struct hellotest_device_t*)malloc(sizeof(struct hellotest_device_t)); 
     
        if(!dev) { 
            LOGE("HelloTest: failed to alloc space"); 
            return -EFAULT; 
        
     
        memset(dev, 0, sizeof(struct hellotest_device_t)); 
        dev->common.tag = HARDWARE_DEVICE_TAG; 
        dev->common.version = 0
        dev->common.module = (hw_module_t*)module; 
        dev->common.close = hellotest_device_close; 
        dev->write_string = hellotest_write_string;
        dev->read_string = hellotest_read_string; 
     
        if((dev->fd = open(DEVICE_NAME, O_RDWR)) == -1) { 
            LOGE("HelloTest: open /dev/hello fail-- %s.", strerror(errno));free(dev); 
            return -EFAULT; 
        
     
        *device = &(dev->common); 
         LOGI("HelloTest: open /dev/hello successfully."); 
     
        return 0
    static int hellotest_device_close(struct hw_device_t* device) { 
        struct hellotest_device_t* hello_device = (struct hellotest_device_t*)device; 
     
        if(hello_device) { 
            close(hello_device->fd); 
            free(hello_device); 
        
     
        return 0
     
    static int hellotest_write_string(struct hellotest_device_t* dev,char * str) { 
        LOGI("HelloTest:write string: %s", str); 
     
        write(dev->fd, str, sizeof(str)); 
     
        return 0
     
    static int hellotest_read_string(struct hellotest_device_t* dev, char ** str) { 
         LOGI("HelloTest:read string: %s", *str); 
        read(dev->fd, *str, sizeof(*str)); 
     
        return 0
    </cutils></cutils></errno.h></fcntl.h></hardware></hardware>

    这个程序就是把我们读写/dev/hello的代码做了一次封装而已,经过封装以后,我们有了hw_module_t,hw_module_methods_t,hw_device_t这三个结构体。正因为它如此规范,所以上层才可以按照这种规范的格式获取的hw_module_t结构体,进而使用hw_module_methods_t中的open函数获取hw_device_t结构体,然后使用hw_device_t结构体中的方法操作Linux驱动。

    2.Android.mk

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      LOCAL_PATH := $(call my-dir)
      include $(CLEAR_VARS)
     
      LOCAL_MODULE_TAGS := optional
      LOCAL_PRELINK_MODULE := false
      LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
     
        LOCAL_SHARED_LIBRARIES += \
    libcutils libutils liblog
    LOCAL_LDLIBS:=  -L$(SYSROOT)/usr/lib -llog
     
      LOCAL_SRC_FILES := hellotest.c
      LOCAL_MODULE := hellotest.default
      include $(BUILD_SHARED_LIBRARY)

    LOCAL_MODULE 的值为hellotest.default,注意,一定要加上default,不然使用hw_get_module函数找不到我们的HAL模块。
    然后在hardware/libhardware/include/hardware新建对应的头文件hellotest.h

    3.hellotest.h

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #ifndef ANDROID_HELLO_TEST_H 
    #define ANDROID_HELLO_TEST_H 
    #include <hardware hardware.h=""
     
    __BEGIN_DECLS 
     
    /*定义模块ID,必须的,用与上层程序获取该模块*/ 
    #define HELLOTEST_HARDWARE_MODULE_ID "hellotest"
     
    /*硬件模块结构体*/ 
    struct hellotest_module_t { 
        struct hw_module_t common; 
    }; 
     
    /*硬件接口结构体*/ 
    struct hellotest_device_t { 
        struct hw_device_t common; 
        int fd; 
        int (*write_string)(struct hellotest_device_t* dev, int val); 
        int (*read_string)(struct hellotest_device_t* dev, int* val); 
    }; 
     
    __END_DECLS 
     
    #endif  </hardware>

    做好这三个文件以后,我们就可以编译该模块了。进入到hardware/libhardware/modules目录,执行mm命令进行编译,编译后的文件如图所示:
    这里写图片描述

    三.写测试代码

    封装好了我们的HAL层module以后,我希望立刻测试它是否正确运行,下面我们将写一个简单的C程序,用来测试module是否正确工作。
    首先在hardware/libhardware/tests/目录下新建一个testhellotest目录,新增test.c和Android.mk文件:

    1.test.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <hardware hardware.h=""
    #include <hardware hellotest.h=""
    #include <fcntl.h>
    #include <stdio.h>
     
    struct hw_module_t * module;
    struct hw_device_t * device;
     
    int main(){
        char *read_str;
        char *write_str="nihao";
        read_str = malloc(100);
        printf("----begin main------\n");
        if(hw_get_module(HELLOTEST_HARDWARE_MODULE_ID,(struct hw_module_t const **)&module)==0){
            printf("get module sucess\n");
        }else{
            printf("get module fail\n");
            return -1;
        }
        if(module->methods->open(module,HELLOTEST_HARDWARE_MODULE_ID,(struct hw_device_t const**)&device)==0){
            printf("open module sucess\n");
        }else{
            printf("open module error\n");
            return -2;
        }
        struct hellotest_device_t* dev = (struct hellotest_device_t *)device;
        dev->read_string(dev,&read_str);
        if(read_str == NULL){
            printf("read error");
        }else{
            printf("read data: %s\n",read_str);
        }
     
        dev->write_string(dev,write_str);
        printf("write data: %s\n",write_str);
        dev->read_string(dev,&read_str);
        if(read_str == NULL){
            printf("read error");
        }else{
            printf("read data: %s\n",read_str);
        }
        printf("----end main------\n");
    return 0;
    }</stdio.h></fcntl.h></hardware></hardware>

    测试的流程正如文章开头描述的那样,首先使用hw_get_module函数获得hw_module_t结构体,然后调用hw_module_methods_t结构体中的open方法过得hw_device_t结构体,然后使用hw_device_t结构体中的read_string和write_string方法与linux驱动交互。注意,驱动的打开是在hw_module_methods_t结构体中的open方法中做的。

    2.Android.mk

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      LOCAL_PATH := $(call my-dir)
     
      include $(CLEAR_VARS)
     
      LOCAL_MODULE_TAGS := optional
     
      LOCAL_MODULE := my_test
     
    LOCAL_LDLIBS:=  -lhardware
     
      LOCAL_SRC_FILES := $(call all-subdir-c-files)
     
      include $(BUILD_EXECUTABLE)

    然后进入到该目录执行mm命令进行编译,编译后生成文件如图所示:
    这里写图片描述

    四.测试

    1.把生成的hellotest.default.so文件拷贝到android设备的/system/lib/hw目录下,这需要root权限,没有root权限请自行解决。
    2.获得root权限后会提示/system是一个只读文件系统,所以需要重新挂载为可读可写的文件系统,执行mount -o remount,rw /system 即可。
    3.修改hellotest.default.so文件的的权限为644,执行chmod 644 /system/lib/dw/hellotest.default.so
    4.装载上一节实现的hello.ko驱动:insmod hello.ko
    5.把生成的my_test可执行文件拷贝的android设备上,建议push my_test /data
    6.给my_test文件添加可执行权限. chmod +x my_test
    7.执行my_test。 ./my_test
    打印如下:
    —-begin main——
    get module sucess
    open module sucess
    read data: hell
    write data: nihao
    read data: niha
    —-end main——
    可见,测试成功。
    如果有问题,可以使用logcat看下HAL层的打印,看看问题出在什么地方。

    展开全文
  • kernel: [946277.337433] {5}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 4
  • Hardware Acceleration

    2019-09-26 16:11:57
    硬件加速学习: 参考:... 硬件加速的级别: Application: 可以打开和关闭硬件加速 ...application android:hardwareAccelerated="true" ...> Activity: 可以打开和关闭硬件加速 ...
  • This book provides a comprehensive and up-to-date guide to the design of security-hardened, hardware intellectual property (IP). Readers will learn how IP can be threatened, as well as protected, by ...
  • srx-hardware

    2014-08-01 14:23:24
    srx-1400-hardware from juniper
  • Hardware Composer

    2018-08-06 15:26:49
    Hardware Composer HAL (HWC) Composer: 作曲家、设计者,这里我觉得翻译成 混合者 比较合适,就是把不同的view layer混合起来 HAL : 硬件抽象层 在Android4.3引入,目的是: 根据手机上的硬件,采用最高效的...
  • open hardware monitor

    2012-08-10 15:12:37
    open hardware monitor
  • Hardware Description Pinout, Interface description, electrical and mechanical specification, ET1100 features and registers
  • 在上一篇博客中介绍了Android9.0中的手动调节亮度的流程,但当时只讲到framwork的整个调用过程,并未讲到如何调用hardware层,这一张来讲一下如何调用hardware,以及如何实现简单的hareware.
  • AzSDK_HardwareID

    2015-06-05 04:09:25
    AzSDK_HardwareID
  • Free Hardware

    2016-02-19 23:14:17
    Stallman -- On "Free Hardware" Jun 22, 1999, 04 :27 UTC By Richard Stallman GNU A number of people have asked the GNU Project if we would like to branch out from free software into free hard
  • cisco 3750 hardware config

    2014-12-15 09:54:34
    cisco 3750 hardware configuration doc
  • For over a decade, Andrew "bunnie" Huang, one of the world's most esteemed hackers, has shaped the fields of hacking and hardware, from his cult-classic book Hacking the Xbox to the open-source laptop...
  • // android 源代码里 cat hardware/libhardware/include/hardware/hardware.h /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,652
精华内容 24,260
关键字:

hardware