Android驱动加载方法

1在终端上insmod xxx.ko,适合调试阶段。


2将驱动编译进内核。


3从int.rc中运行某一个脚本

service loaddriver /system/driver/load.sh
   class main
   user root
   group root
   oneshot

sevice loaddriver /system/driver/load.sh启动loaddriver(名字随意)服务,相当于在终端上运行/system/driver/load.sh,后面还可接参数,

如sevice xxx /system/bin/xxxx A B

load.sh脚本的内容为

#! /system/bin/sh
insmod /system/driver/touchscreen.ko
insmod /system/driver/hello.ko

4从int.rc中运行某一个应用程序

如load.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>  
#include <sys/types.h>
#include <cutils/log.h>
#include <errno.h>  
#define LOG_TAG  "loaddriver"
#define filename "/system/driver/load.conf"
pid_t status;
void systemstatus(int status){
    if (-1 == status) {  
        SLOGE("system error!");  
    }  
    else  {  
        SLOGE("exit status value = [0x%x]\n", status);  
        if (WIFEXITED(status)){  
            if (0 == WEXITSTATUS(status)){  
                SLOGE("run shell script successfully.\n");  
            }  
            else{  
                SLOGE("run shell script fail, script exit code: %d\n", WEXITSTATUS(status));  
            }  
        }  
        else{  
            SLOGE("exit status = [%d]\n", WEXITSTATUS(status));  
        }  
    }   
} 

int main(int argc,char **argv)
{
   FILE *fp;
   char str[1024];
   char *buf;
   buf=(char *)malloc(1024);
   if(buf==NULL){
       SLOGE("malloc memory err\n");
       return -1;
   }
   SLOGE("malloc memory ok\n");
   fp=fopen(filename,"r");
   if(fp==NULL){
	SLOGE("open err!\n");
        return -1;
   }
   SLOGE("open ok!\n");
   while(!feof(fp)){
	if(fgets(str,1024,fp)==NULL)
  	  break;
	SLOGE("the msg is %s and the length is %d %d\n",str,strlen(str),sizeof(str));
        status=system(str);
        systemstatus(status);     
   }
   fclose(fp);
   return 0;
}


load.conf的文件内容为                                  

ls -al
insmod /system/driver/touchscreen.ko
insmod /system/driver/hello.ko

相应的Android.mk内容为

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PRELINK_MODULE := false
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_MODULE := load
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)

然后在init.rc中添加

service loaddrivers /system/driver/load
   class main
   user root
   group root
   oneshot

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 开机动画的加载流程如下: 1. 开机自检:开机后,首先进行硬件自检。如果自检通过,将会启动 bootloader。 2. Bootloader:Bootloader 负责初始化硬件设备,加载 kernel,并且将 kernel 加载到内存中。 3. Kernel:Kernel 是 Android 操作系统的核心,负责初始化硬件设备,启动驱动程序,加载文件系统等。 4. Init 进程:Init 进程是 Android 系统中的第一个用户进程,它负责启动系统中所有的服务,并且加载所有的配置文件和属性。 5. SurfaceFlinger:SurfaceFlinger 是 Android 系统中用于显示图形的核心服务,它在启动后会创建一个显示屏幕,显示屏幕上的内容就是从应用程序中传递过来的。 6. Zygote 进程:Zygote 进程是 Android 系统中的一个特殊进程,它负责预加载常用的类和资源,以提高应用程序的启动速度。当应用程序需要启动时,Zygote 进程会 fork 出一个新的进程,该进程会继承 Zygote 进程的状态,从而加速应用程序的启动。 7. 开机动画:在上述进程启动后,系统会加载开机动画。开机动画通常是一个视频或者一组图片,这些图片或视频会被 SurfaceFlinger 显示在屏幕上。 8. 启动屏幕:当开机动画结束后,系统会显示一个启动屏幕,表示 Android 系统已经启动完毕。此时,用户就可以开始使用 Android 设备了。 总的来说,Android 开机动画加载流程比较复杂,其中涉及到多个进程和服务,需要相互配合才能完成整个过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值