精华内容
下载资源
问答
  • Mac 硬件驱动 kext 安装方法

    万次阅读 2019-04-24 12:32:45
    Mac 硬件驱动 kext 安装方法
                   

    转载自:http://l24317.blog2.cnool.net/Article/2007/09/24/13541.html

    一、Mac驱动程序的概念

    我想用我所理解的系统概念为各位稍微的介绍一下在Mac上的驱动程序概念,基本上,Mac OS X Tiger是一个UNIX架构的核心的系统,所以如果有一些UNIX系统概念其实在底层的架构会很容易了解,系统核心,通常会有包含了硬件支持的程序在内,也就是说有一些需要在系统核心启动就跟着支持的基础硬件组件(例如CPU 指令集支持、内存管理...),大多放在核心中,不过Mac是一种经由APPLE公司自行订制化的核心,基础的硬件支持大多也以APPLE计算机为主,但是,并不会把所有的驱动程序都放在核心中,通常只有『必要的』才会放在核心,不然核心可能会过度肥大,整个系统执行效率就更差。

    那么还有许多硬件驱动怎么办呢?通常会把他作成模块程序,然后在核心本身支持模块加载功能,在Linux 中叫做 Kernel Loadable Modules(KLM) 的架构,而在Mac OS X 中,称为 Mac OS X Kernel Extension,其实就把他想成是『驱动程序』就可以了,也就是Mac OS X系统中许许多多的 .kext 文件名的程序集,大多放在 /System/Library/Extensions/ 中,当核心有需要就去找到相应的设备ID然后叫起那个程序来支持硬件。

    而现在的MAC OSX86 中其实问题比较多就是在硬件没有驱动支持,也就是没有相应的驱动程序可以使用,相关的HCL (硬件兼容列表)可以到 http://wiki.osx86project.org/wiki/index.php/HCL 下找到,进而可以找到相应可使用的驱动程序。


    看了第一部分,假设您已经有简单的概念后,我们知道,其实Mac的驱动程序就是 Kernel Extension,也就是硬件相对应的 .kext 档案,我无法告诉妳哪里一定找的到兼容的kext可以用,但是可以提供个下载驱动的地址http://www.weiphone.com/thread-1918-1-1.html
    因为,kext 档案不一定每一种硬件都有人为他制作驱动,所以还是请您自己去查 相关的HCL (硬件兼容列表),先确定有支持,如果不在内建的系统中,应该都有下载kext的连结和说明,所以以下程序我都假设已经找到了kext的档案,


    三、实例:安装T43网卡:


    我当初找到了 T43 用的 Broadcomd 5751 的kext档案 AppleBCM5751Ethernet.kext
    我以他为例安装入系统内的步骤如下:

    1. 打开终端:
    打开终端,执行:

    sudo -s

    然后键入你的密码,做好切换管理员的动作。
    PS. sudo 是一个安全为考虑的执行管理指令的方法,这边不多做介绍。

    2. 复制kext 到相应目录:
    相应目录是 " /System/Library/Extensions/ " ,
    只要把你找到的驱动 .kext 档案复制到 /System/Library/Extensions/ 中,
    方法一:直接进入" /System/Library/Extensions/ "目录中,将自己的驱动 .kext 档案复制到里面,中途可能要输入密码;
    方法二:假设你的驱动叫AppleBCM5751Ethernet.kext,并放在桌面的,
    指令如下:

    cp ~/Desktop/AppleBCM5751Ethernet.kext /System/Library/Extensions/

    注意:请把AppleBCM5751Ethernet.kext 换成你自己要安装的.kext驱动名

    3. 更改文件权限:
    文件权限是UNIX系统中蛮重要的一个观念,在Unix为基础的Mac OS X中也一样,就是要把这些复制到系统内的文件的权限切换成系统(管理员)拥有与使用,指令如下:

    sudo chown -R root:wheel /System/Library/Extensions/AppleBCM5751Ethernet.kext
    sudo chmod -R 755 /System/Library/Extensions/AppleBCM5751Ethernet.kext

    注意:请把AppleBCM5751Ethernet.kext 换成你自己要安装的.kext驱动名

    4. 清除 kext 的快取:
    要清除已经安装并制作快取的kext 快取内容,不然可能下次重启之后系统还是去读取快取,就不会读到新放进去kext 驱动
    指令如下:

    rm /System/Library/Extensions.kextcache
    rm /System/Library/Extensions.mkext
    kextcache -k /System/Library/Extensions


    5. 系统重启:
    硬件驱动后基本上是需要重启才会加载,可以点选右上角的苹果点选重启系统,或是使用指令 reboot 重启,接下来就是祈祷重启后系统一切正常,硬件支持良好啦!


    驱动程序其实安装并不难,找不找的到驱动(kext)才是问题。


               
    展开全文
  • 本课程为uboot学习的第10部分,主要讲解uboot中的硬件驱动部分。主要以SD/MMC驱动为例详细分析了SD/MMC卡的初始化函数、读写函数等的逻辑,目的是让大家对驱动框架有所了解,进而通过此初步学习到linux驱动的思想。
  • 一、下载并解压ESXi-Customizer软件...第二个Browse选择该硬件驱动vib文件的位置(vib驱动文件去相应的服务器官网下载);第三个Browse选择新生成的ESXi的存放位置。然后点击Run! 四、完成后弹出提示如下: ...

    一、下载并解压ESXi-Customizer软件:

    二、点击“ESXi-Customizer”执行文件,打开软件:

     三、在弹出的窗口中,第一个Browse选择原有的ESXi的镜像位置;第二个Browse选择该硬件驱动vib文件的位置(vib驱动文件去相应的服务器官网下载);第三个Browse选择新生成的ESXi的存放位置。然后点击Run!

    四、完成后弹出提示如下:

     

     

    展开全文
  • Android 标准的硬件驱动分为两个部分,一个是运行在linux内核里的硬件驱动,而另外一部分是运行在用户空间的硬件抽象层。采用这种方法,就可以使系统具有硬件无关性,也保护了部分厂商的利益。在 Android 从硬件到...

           Android 标准的硬件驱动分为两个部分,一个是运行在linux内核里的硬件驱动,而另外一部分是运行在用户空间的硬件抽象层。采用这种方法,就可以使系统具有硬件无关性,也保护了部分厂商的利益。在 Android 从硬件到应用:一步一步向上爬 1 -- 从零编写底层硬件驱动程序 中已经有了编写硬件驱动到linux内核里的步骤,下面就要接着这个工程去看看怎么在硬件抽象层增加硬件模块和我们的内核驱动程序进行交互,完成硬件控制。

    进入hardware/libhardware/include/hardware目录,新建gpio.h:

    #ifndef ANDROID_GPIO_INTERFACE_H  
    #define ANDROID_GPIO_INTERFACE_H  
    #include <hardware/hardware.h>  
          
    __BEGIN_DECLS  
          
    /*module ID*/  
    #define GPIO_HARDWARE_MODULE_ID "gpio"  
    /*module struct*/  
    struct gpio_module_t {
    	struct hw_module_t common;  
    };       
    /*interface struct*/  
    struct gpio_device_t {
    	struct hw_device_t common;  
    	int fd;  
    	int (*set_val)(struct gpio_device_t* dev, int val);  
    	int (*get_val)(struct gpio_device_t* dev, int* val);  
    }; 
    __END_DECLS
    #endif  
    其中set_val和get_val是HAL层向上层应用提供的API接口。

    cd到hardware/libhardware/modules目录,新建gpio目录,在里面新建gpio.c文件:

    #include <hardware/hardware.h>  
    #include <hardware/gpio.h>  
    #include <fcntl.h>  
    #include <errno.h>  
    #include <cutils/log.h>  
    #include <cutils/atomic.h>  
    #define DEVICE_NAME "/dev/AdrIO"  
    #define MODULE_NAME "Gpio"  
    
    //open and close
    static int gpio_device_open(const struct hw_module_t* module, const char* name, struct hw_device_t** device);  
    static int gpio_device_close(struct hw_device_t* device);  
    //device access
    static int gpio_set_val(struct gpio_device_t* dev, int val);  
    static int gpio_get_val(struct gpio_device_t* dev, int* val);  
    
    static struct hw_module_methods_t gpio_module_methods = {  
        open: gpio_device_open  
    };  
    
    struct gpio_module_t HAL_MODULE_INFO_SYM = {  
        common: {  
            tag: HARDWARE_MODULE_TAG,  
            version_major: 1,  
            version_minor: 0,  
            id: GPIO_HARDWARE_MODULE_ID,  
            name: MODULE_NAME,  
            author: "HAL",  
            methods: &gpio_module_methods, }  
    }; 
    
    static int gpio_device_open(const struct hw_module_t* module, const char* name, struct hw_device_t** device) 
    {  
    	struct gpio_device_t* dev;
    	dev = (struct gpio_device_t*)malloc(sizeof(struct gpio_device_t));  
    	memset(dev, 0, sizeof(struct gpio_device_t));  
    	dev->common.tag = HARDWARE_DEVICE_TAG;  
    	dev->common.version = 0;  
    	dev->common.module = (hw_module_t*)module;  
    	dev->common.close = gpio_device_close;  
    	dev->set_val = gpio_set_val;
    	dev->get_val = gpio_get_val;  
    	if((dev->fd = open(DEVICE_NAME, O_RDWR)) == -1) {  
    		LOGE("gpio: failed to open /dev/AdrIO -- %s.", strerror(errno));
    		free(dev);  
    		return -EFAULT;  
    	}  
    	*device = &(dev->common);  
    	return 0;  
    }  
    
    static int gpio_device_close(struct hw_device_t* device) 
    {  
    	struct gpio_device_t* gpio_device = (struct gpio_device_t*)device;  
    
    	if(gpio_device) {  
    	    close(gpio_device->fd);  
    	    free(gpio_device);  
    	}    
    	return 0;  
    }  
    
    static int gpio_set_val(struct gpio_device_t* dev, int val) 
    {  
    	LOGI("gpio: set value %d to device.", val);  
    	write(dev->fd, &val, sizeof(val));  
    	return 0;  
    }  
    
    static int gpio_get_val(struct gpio_device_t* dev, int* val) 
    {  
    	return 0;
    }
    为了防止调用时出现 Permission denied的情况:

    打开am335xevm文件系统根目录rootfs,打开ueventd.rc添加:

    /dev/AdrIO  0666 root root

    该文件并不会创建设备节点,而是当有设备节点产生的时候,eventd 会根据这个数据库设置设备的权限。

    修改hardware/libhardware/modules目录下Android.mk在harware_modules :=后面加上“gpio”

    在gpio目录中继续添加Android.mk文件:

    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 := liblog
    LOCAL_SRC_FILES := gpio.c
    LOCAL_MODULE := gpio.default
    include $(BUILD_SHARED_LIBRARY)

    编译HAL层:

    make TARGET_PRODUCT=am335xevm_sk -j8 OMAPES=4.x

    如果出现错误,参考:

    没有规则可以创建 /lib/liblog.so 

    如果成功,就可以生成 gpio.default.so

    out/target/product/am335xevm_sk/obj/lib/gpio.default.so
    
    这个就是我们需要的硬件抽象层模块,这一步完成之后,还要接着向上走,最终完成硬件调用。

    展开全文
  • 上层APP调用底层硬件驱动过程解析

    千次阅读 2017-12-07 13:12:30
    APP应用程序->应用框架层->硬件抽象层-> 硬件驱动程序 一、硬件驱动层  进入kernel/drivers文件夹中,创建一文件夹,放入驱动程序。包括头文件,C文件,Makefile,Kconfig。同时对drivers下的Makefile跟...
    APP应用程序->应用框架层->硬件抽象层-> 硬件驱动程序
    

    一、硬件驱动层

                进入kernel/drivers文件夹中,创建一文件夹,放入驱动程序。包括头文件,C文件,Makefile,Kconfig。同时对drivers下的Makefile跟Kconfig进行相应的添加,这样配置编译选项后,即可编译。编译完后,可以在/dev,/proc,/sys/class中得到相应的文件,其中dev下的文件即为该设备文件。

    二、硬件抽象层

                进入源码根目录下的hardware/libhardware/include/hardware新建头文件,在hardware/libhardware/modules中新建目录,在该目录下放入C文件调用设备文件(open函数打开/dev/XXX设备文件),最后在该目录下创建Android.mk文件,编译后得到XXX.default.so文件。重新打包后,system.img就包含我们定义的硬件抽象层模块XXX.default。

    三、应用框架层

                进入frameworks/base/services/jni目录,创建com_android_server_XXXService.cpp文件(#include  以此调用抽象层方法 ),实现jni方法。com_android_server前缀表示的是包名,表示硬件服务XXXService是放在frameworks/base/services/java目录下的com/android/server目录的。对同目录下的onload.cpp文件进行修改,这样,在Android系统初始化时,就会自动加载该JNI方法调用表。同时修改该目录下的Android.mk。

               进入到frameworks/base/core/java/android/os目录,新增IXXXService.aidl接口定义文件,该文件提供功能函数。在frameworks/base目录下的Android.mk添加该aidl文件。进入frameworks/base/services/java/com/android/server目录,新增XXXService.java(主要是通过调用JNI方法来提供硬件服务),修改同目录的SystemServer.java文件,在ServerThread::run函数中增加加载HelloService的代码。

              这样,重新打包后的system.img系统镜像文件就在Application Frameworks层中包含了我们自定义的硬件服务XXXService了,并且会在系统启动的时候,自动加载XXXService。这时,应用程序就可以通过Java接口来访问Hello硬件服务了。

    四、APP应用层

               用eclipse编写应用层的APP。程序通过ServiceManager.getService("XXX")来获得XXXService,接着通过IXXXService.Stub.asInterface函数转换为IXXXService接口。然后把出R文件的其他文件都拷到/packages/experimental下,在该APP目录下创建Android.mk文件。编译后安装该生成的apk即可使用该程序调用底层硬件驱动。

            

              大概整个过程就这样,上层app调用框架层的java接口,java接口通过jni调用硬件抽象层,硬件抽象层则通过打开设备文件调用底层硬件驱动。
    展开全文
  • Linux-uboot-学习笔记(9):uboot硬件驱动 一、uboot与linux驱动 1、驱动是什么? 驱动的狭义概念:操作系统中用来具体操控硬件的那部分代码。裸机程序中是直接操控硬件的,而操作系统中必须通过驱动来操控硬件。 ...
  • uboot的硬件驱动

    2018-09-21 17:24:04
    (1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬件的那部分代码叫驱动)。 (2)裸机程序是直接操控硬件的,操作系统必须通过驱动来操控硬件。这两个有什么区别?本质区别就是...
  • 一些服务器的硬件驱动程序可能在ESXi原生的ISO安装文件里并没有提前包含,因此需要在安装ESXi之前加载相关驱动。例如RAID,NIC等驱动。 所需文件: VMware PowerCLI VMware vSphere 镜像离线包(offline bundle) 相关...
  • Lenovo T430安装Windows 2003 硬件驱动

    千次阅读 2013-04-26 18:11:03
    Lenovo T430安装Windows 2003 硬件驱动 Lenovo T430安装Windows 2003 硬件驱动 安装前名称 安装后名称 驱动程序 基本系统设备  Ricoh PCIe SDXC/MMC Host Controller Media Card Reader ...
  • Linux下的硬件驱动——USB设备(上)(驱动配置部分)USB设备越来越多,而Linux在硬件配置上仍然没有做到完全即插即用,对于Linux怎样配置和使用他们,也越来越成为困扰我们的一大问题。本文着力从Linux系统下设备...
  • android平台硬件驱动原理学习(总)

    千次阅读 2016-01-22 15:32:03
    Android的硬件驱动调用流程分为以下几层: 1、内核驱动; 2、硬件抽象层(HAL层); 3、通过JNI方法提供java调用接口; 4、在应用程序框架层()增加硬件服务接口供应用程序使用; 5、app层最终调用硬件; ...
  • refer to 在Android硬件抽象层增加接口模块访问硬件驱动程序
  • APP应用程序->应用框架层->硬件抽象层-> 硬件驱动程序 一、硬件驱动层   进入kernel/drivers文件夹中,创建一文件夹,放入驱动程序。包括头文件,C文件,Makefile,Kconfig。同时对drivers下的Makefile跟Kconfig...
  • 1.Linux下的硬件驱动——USB设备(上)(驱动配置部分)----http://www.ibm.com/developerworks/cn/linux/l-usb/index1.html 2.Linux下的硬件驱动——USB设备(下)(驱动开发部分)----...
  • 问题描述:我用USB-CAN转换器连接到电脑时,开始会弹出找到新硬件,需要安装硬件驱动的对话框。开始并没找到驱动,所以点了几个“下一步”就完事了。后面下载到驱动后需要再之前的那个弹出对话框中按提示步骤安装时...
  • 联想笔记本硬件驱动官网下载地址

    千次阅读 2012-09-14 23:51:28
    联想笔记本硬件驱动官网下载地址 http://support1.lenovo.com.cn/lenovo/wsi/ 联想官网出了个工具叫 联想驱动一键安装 我试用了下,发现其要联网才能安装,而我们装系统时,常常没有装网卡的驱动, 用其是更新...
  • 在CentOS/RHEL上打开ELRepo软件仓库源问题描述:在CentOS系统上安装ELRepo提供的硬件驱动,怎么使用ELRepo源?CentOS/RHEL提供了几个官方软件源(base, updates, contrib),这些源更新较慢。有时候需要使用第三方...
  • 升级Linux硬件驱动结构作者:冯立功编译 2005-01-18 10:55:19 来自:开发系统世界 硬件驱动程序是界于硬件和Linux内核之间的软件接口,是一种低级的、专用于某一硬件的软件组件。这种软件组件可以使硬件与更普遍的...
  • Android下,java应用程序通过JNI方法调用硬件抽象层模块,在Android 从硬件到应用:一步一步向上爬 3 -- 硬件抽象层访问硬件驱动 中我们已经编译好了硬件抽象层模块,下面就要开始为HAL层编写JNI方法,为上层提供...
  • 硬件平台:TI AM335X Starter ... 这次写《Android 从硬件到应用》是想尝试从底层的最简单的GPIO硬件驱动开始,一步一步的向上走,经过硬件抽象层HAL、JNI方法等,最终编写出APP,达到硬件调用的目的,期间会增加一些
  • Linux系统的硬件驱动程序编写原理

    千次阅读 2009-12-28 18:09:00
    Linux系统的硬件驱动程序编写原理http://www.yesky.com/161/1874161.shtml本文详细地介绍如何Linux系统的硬件驱动程序的编写原理,指出哪些内核例程将会被调用、如何初始化驱动程序及如何分配内存等等。大家一定对...
  • 编写C程序快速测试硬件驱动: 在Android 源码根目录下的external文件夹创建driver_test文件夹: cd external mkdir driver_test cd driver_test 创建Android.mk: LOCAL_PATH := $(call my-dir) include $...
  • 开发Android硬件驱动程序

    千次阅读 2014-06-07 19:21:08
    一、 1、实现内核驱动程序模块  驱动程序freg的目录结构如下:  ~/android-2.3_r1/kernel/goldfish  ----drivers  ----freg  ----freg.h  ----freg.c
  • uboot之uboot中的硬件驱动

    千次阅读 2018-05-28 08:54:35
    一、uboot和linux驱动 1、uboot本身是裸机程序,裸机程序是没有驱动概念的 2、裸机程序是直接操控硬件的,操作系统中必须通过驱动来操控硬件。这两个的区别在于分层。 3、uboot的虚拟地址对硬件操作的影响 (1)...
  • 开发DSP硬件驱动程序的一种方法

    千次阅读 2011-06-07 21:08:00
    开发DSP硬件驱动程序的一种方法 张 行,雷 勇 (四川大学电气信息学院 四川 成都610065) l 引 言 传统的DSP程序开发包含两方面程序:即配置、控制、中断等管理DSP片内外设、接口的硬件相关程序和基于应用的算法程序...
  • 准备工作,一台机器装Win2008R2版本操作系统,同时安装HCKSetup.exe 另外两台机器分别安装Win8的32版本与64版本操作系统。...WHCK硬件驱动测试: 第一步: 打开HCK Studio程序 看到标题最上面右侧有一个Configu

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,293
精华内容 17,317
关键字:

硬件驱动