搜档网
当前位置:搜档网 › Android usb流程分析

Android usb流程分析

Android usb流程分析
Android usb流程分析

Android usb流程分析

文档以UMS(usb mass storage)为例来分析流程,主要按照图中红线来分析(即从插入USB 开始到状态栏弹框,然后又从选择UMS功能开始往下的流程)。以前没有看过USB相关代码,网上也很少有分析usb FRAMEWORK相关的东西,文档中可能存在错误,如果发现欢迎指正。

总体框图

1.Kernel USB 流程

LINUX KERNEL GADGET 架构

Linux USB Gadget分三层架构,层次关系从上到下

一层:USB Gadget功能层。BSP/Driver开发者通常是要实现这一层,从而实现一个具体的设备驱动,如Anddroid在此层实现了adb,mtp,mass_storage等。浏览参考关注此层代码时,会发现“composite”是此层的关键字,此层中关键的数据结构是:struct usb_composite_driver。这一层的驱动文件一般为:driver/usb/gadget/android.c (android实现的)或driver/usb/gadget/serial.c(传统Linux实现的USB转串口)。

二层:USB设备层(usb core)。这一层是Linux内核开发维护者实现的,与我们没太大关系,不用我们操心,我们只关心其的一些接口就行。浏览参考关注此层时,会发现“gadget”是此层的关键字,此层的关键数据结构是:usb_gadget_driver,usb_composite_dev。

这层主要的一个驱动文件为:driver/usb/gadget/composite.c

三层:USB设备控制器驱动层。这一层主要是与CPU、CPU USB控制器有关,与硬件紧密相关,主要它和USB控制器牵扯在一起,涉及有寄存器、时钟、DMA等等。但是这一层往往是由芯片厂商去实现。我们一般仅需在板级文件中处理好所需要的USB接口即

可。这层的关键字就是“UDC”,主要驱动文件命名含“udc”关键字,一般与CPU或芯片厂商有关,如MTK UDC 驱动在kernel/mediatek/platform/mt6592/kernel/drivers/usb20/目录下。

USB Gadget的三层架构的关系

可以用一句简单的话去概括三层的关系:USB Gadget功能层调用USB设备层的接口,USB 设备层调用USB设备控制器驱动层的接口,然后USB设备控制器驱动层回调USB设备层,USB设备层回调USB Gadget功能层。

USB 设备驱动层:

USB DEVICE注册

Mt_devs.c

Driver:

Usb20.c (doov6592kk\kernel\mediatek\platform\mt6592\kernel\drivers\usb20):

Probe: 重新注册了一个"musb-hdrc" 设备,

然后在kernel/drivers/usb/musb/musb_core.c 加载musb-hdrc 驱动,

执行PROBE, 这里才是真正的加载驱动,内存,中断,DMA等资源申请,并初始化USB. musb_probe → musb_init_controller → musb_gadget_setup → usb_add_gadget_udc 加入了LINUX USB框架了。

Android.c

注册的android_usb_function:

在SYS下创建一系列文件, 对应接口XX_show/store

充电器插入中断检测电路

USB插入中断流程:

USB 插入中断

→WAKEUP PMIC THERAD

→ if( (((int_status_val_0)&(0x0400))>>10) == 1 ) { chrdet_int_handler(); }

→ do_chrdet_int_task

→ mt_battery_charger_detect_check

→ mt_usb_connect

→ musb_start(mtk_musb); * Program the HDRC to start (enable interrupts, dma, etc.). →开始USB 枚举

→ android.c android_setup

→ android_work

→ kobject_uevent_env

→ USBservice ueventobserver 收到UEVENT事件。。。。

PMIC中断,检测到充电器中断

Battery 里判断charger type, 然后会使能USB, 等待主机发枚举包。

收到主机发来的枚举包,会调用到android_setup 完成枚举,android_setup会调用android_work 发uevent 事件。

https://www.sodocs.net/doc/798698864.html,bService相关

/**

* UsbService manages all USB related state, including both host and device support.

* Host related events and calls are delegated to UsbHostManager, and device related

* support is delegated to UsbDeviceManager.

*/

在systemserver 中启动

并调用,

在USBDEVICEMANAGER 里,得到NOTIFICATION_SERVICE, 后面显示通知时用到。

上面new usbdevicemanager, 在其构造函数中,new usbhandler

在usbhandler构造函数中,

上面那个文件是有kernel android.c 里的设备,

当KERNEL android_work 发UEVENT 时, UeventObserver 会收到,执行onUEvent

Updatestate, 给HANDLER发消息

Handler 处理消息:

updateUsbNotification , STATUS BAR 显示通知, https://www.sodocs.net/doc/798698864.html,bSettings ,

updateAdbNotification 提示ADB , com.android.settings.DevelopmentSettings 。LOG:

3.应用相关

3.1 Status bar:

On resume中调用下面方法加载preferencescreen,

并获得USBMANAGER, 在后面设置改变时会用到。

UsbManager Overview

This class allows you to access the state of USB and communicate with USB devices. Currently only host mode is supported in the public API. You can obtain an instance of this class by calling Context.getSystemService().

当设置改变时调用usbmanager 的setCurrentFunction方法来设置USB FUNCTION。

往下的流程:

mUsbManager.setCurrentFunction(function, makeDefault);

→mService.setCurrentFunction(function, makeDefault);

→mDeviceManager.setCurrentFunctions(function, makeDefault);

→mHandler.sendMessage( MSG_SET_CURRENT_FUNCTIONS, functions, makeDefault);

→setEnabledFunctions

→setUsbConfig

→SystemProperties.set("https://www.sodocs.net/doc/798698864.html,b.config", config);

→init property_service

→init.rc

→内核SYS 文件show/store 完成KERNEL USB FUNCTION bind.

kernel usb function bind

3.2 UsbStorageActivity

/**

* This activity is shown to the user for him/her to enable USB mass storage

* on-demand (that is, when the USB cable is connected). It uses the alert

* dialog style. It will be launched from a notification.

*/

USBDEVICEMANAGER 的handler 处理中还会发送ACTION_USB_STATE 的广播。

Send boardcast , 上面的LOG:

广播会被mountservice 收到

因为如上图StorageNotification.start 中通过storagemanager 注册了listener, 会huidao StorageNotification(SYSTEMUI 中)的onUsbMassStorageConnectionChangedAsync

onUsbMassStorageConnectionChangedAsync中会调到updateUsbMassStorageNotification

updateUsbMassStorageNotification,

提示UMS。

UsbStorageActivity 中如果使能UMS,则会通过storagemanager enableUsbMassStorage 方法设置UMS。

往下流程分析:

mStorageManager.enableUsbMassStorage();

→mMountService.setUsbMassStorageEnabled(true);

→往handler 发H_UNMOUNT_PM_UPDATE 消息,

→处理消息,mForceUnmounts.add(ucb);

→ doUnmountVolume(path, true, removeEncryption);

→回调UmsEnableCallBack. handleFinished

→ doShareUnshareVolume

→ mConnector.execute("volume", enable ? "share" : "unshare", path, method);

→VOLD 下面就是VOLD的处理流程了。

4.Mountservice, storagemanager

/**

* MountService implements back-end services for platform storage

* management.

* @hide - Applications should use android.os.storage.StorageManager

* to access the MountService. */

和vold 等合作起作用,主要负责监听并广播device 的mount/unmount/bad removal 等等事件。

mountservice 启动也在 systemserver 中, 如下图,构造函数中 new NativeDaemonConnector, 连接到VOLD .

5.Vold ( volume daemon

vold 启动在init.rc 中:

入口: /system/vold/main.cpp

流程图:

接上面的流程,mountservice 发下来share 的命令后(之前发了umount), 会到CommandListener.cpp 中VolumeCmd的runCommand。

VolumeManager::shareVolume 会将设备名

写入到sys 下的一个文件,这个文件是由kernel 的mass_storage_function init函数创建的,写入要分享的设备名就直接将这个设备share 出去了。

问题:

1.只大概梳理了UMS,其他项MTP,PTP 等都没分析。

2.内核USB CORE的功能比较复杂,没涉及,KERNEL USB 功能绑定功能没有深入涉及。

3.本文档不涉及到USB HOST(特指KERNEL不原生支持的设备)。

android系统开机启动流程分析

一,系统引导bootloader 加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内核。还有ramdisk】 二,内核kernel bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成启动。 内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init process,切换至用户空间(user-space) 内核zImage解压缩 head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境(内存等),调用decompress_kernel进行解压,解压后调用start_kernel启动内核【start_kernel是任何版本linux内核的通用初始化函数,它会初始化很多东西,输出linux版本信息,设置体系结构相关的环境,页表结构初始化,设置系 统自陷入口,初始化系统IRQ,初始化核心调度器等等】,最后调用rest_init【rest_init 会调用kernel_init启动init进程(缺省是/init)。然后执行schedule开始任务调度。这个init是由android的./system/core/init下的代码编译出来的,由此进入了android的代码】。 三,Init进程启动 【init是kernel启动的第一个进程,init启动以后,整个android系统就起来了】 init进程启动后,根据init.rc 和init. .rc脚本文件建立几个基本 服务(servicemanager zygote),然后担当property service 的功能 打开.rc文件,解析文件内容。【system/core/init/init.c】将service信息放置到service.list中【system/core/init/init_parser.c】。 建立service进程。【service_start(…) execve(…)】 在init.c中,完成以下工作 1、初始化log系统【解析/init.rc和init.%hardware%.rc文件,在两个 文件解析步骤2时执行“early-init”行动】 2、初始化设备【在/dev下创建所有设备节点,下载firmwares】 3、初始化属性服务器【在两个文件解析步骤2时执行“init”行动】

史上最全工程施工全过程详解

史上最全工程施工全过程详解,没有之一!! 一、前期施工准备阶段 地质勘察 地质单位受建设单位的委托,据设计提供的相关资料,对拟建场地通过各种勘察手段和方法对地质结构或地质构造:地貌、水文地质条件、土和岩石的物理力学性质等,做出分析评价出具详细的“岩土工程勘察报告”,为设计和施工提供所需的工程地质资料。

文物勘察 根据国家文物保护法相关规定:进行基本建设工程,建设单位应当事先报请政府文物行政部门组织从事考古发掘的单位在工程范围内有可能埋藏文物的地方进行考古调查、勘探。 考古调查、勘探中发现文物的,由省、自治区、直辖市人民政府文物行政部门根据文物保护的要求会同建设单位共同商定保护措施;遇有重要发现的,由省、自治区、直辖市人民政府文物行政部门及时报国务院文物行政部门处理。

建筑边坡与深基坑工程的设计方案评审 设计方案评审是指县级以上住房城乡建设主管部门或其委托机构依据国家、地方有关技术规范和相关的强制性条文,对建筑边坡与深基坑工程设计方案进行的安全、经济、合理等方面的技术性论证。其目的是:为加强对建筑边坡与深基工程的管理,确保建设工程及其相邻建(构)筑物和地下管线、道路的安全,土方开挖图确定后,依据国家相关规定:建设单位应委托评审组织机构对建筑边坡与深基坑工程的设计方案进行评审。

工程测量定位 是指建筑工程开工后的第一次放线,建筑物定位参加的人员是:城市规划部门(下属的测量队)及施工单位的测量人员(专业的),根据建筑规划定位图进行定位,最后在施工现场形成(至少)4个定位桩。放线工具为“全站仪”或“比较高级的经纬仪。

施工现场市政临水临电报批 建筑单位在取得建设行政主管部门批准的建筑工程许可证之后,持证明分别到电力公司、自来水公司办理临水临电审批手续。

Android 开机启动流程

Android的开机流程 1. 系统引导bootloader 1) 源码:bootable/bootloader/* 2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择 a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写 b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.i mg包含内核,基本的文件系统,用于工程模式的烧写 c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况) 2. 内核kernel 1) 源码:kernel/* 2) 说明:kernel由bootloader加载 3. 文件系统及应用init 1) 源码:system/core/init/* 2) 配置文件:system/rootdir/init.rc, 3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能 4. 重要的后台程序zygote 1)源码:frameworks/base/cmds/app_main.cpp等 2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_process a)建立Java Runtime,建立虚拟机 b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序 c) 启动System Server 5. 系统服务system server 1)源码:frameworks/base/services/java/com/android/server/SystemServer.jav a 2) 说明:被zygote启动,通过SystemManager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等) 6. 桌面launcher 1)源码:ActivityManagerService.java为入口,packages/apps/launcher*实现 2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher 7. 解锁 1) 源码: frameworks/policies/base/phone/com/android/internal/policy/impl/*lock* 2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置

建筑工程施工工艺流程大全

施工技术合理化建议 1、建议本工程的设计师到场,以确保现场出现的施工技术问题时能够按照业主的合理要求,以最合理的方案,最快的速度、最有效的措施进行协调解决,保证施工顺利进行,从而提高效率,降低成本。 2、建议业主召开施工前的进度计划会议。工程不能按业主要求如期交付使用,是当前工程施工中存在的比较普遍的问题,虽然因素诸多,但施工组织管理不力是主要原因。因此应细化各施工队的进度计划,制定一个合理的符合实际的总进度表并认真监督执行,以确保各施工队以最低的消耗、最快的效率、最短的工期完成本工程。 3、建议业主进行开工前的技术会审,尽量做到施工时无变更,过程中少签证,减少施工过程中不必要的浪费,使本工程既能保证按期完工,又能较好地体现出原装饰设计方案的效果,这就需要各施工方对图纸的研究、理解细之又细,严之又严。以避免施工中出现疏漏给业主造成不必要的浪费。 4、建议业主成立现场施工领导小组,由业主负责、监理挂帅、各参建单位参加 (1)每天一个碰头会,汇总当天进度、摆出问题及解决办法、安排第二天的工作,可采取现场讲评。 (2)成立技术领导小组,由监理和总包方技术负责人挂帅,经常性就工地各类技术问题进行会审,解决问题不过夜,以确保工程顺利进行。 (3)成立安全文明检查小组,由各施工队出人轮流值班检查工地安全文明施工情况,要求当值人员做好值班记录,以备业主和监理可随时检查。 (4)实行奖惩制度,对不按进度施工的、不安全文明施工的施工队要进行罚款。罚金用于奖励表现好的施工队。 (5)监督举报制度,所有人员都可对不安全不文明现象进行举报,一经查实罚款的50%奖励举报人。这是强化工地管理的有效方法。

(行政管理)第八讲行政监督

第八讲行政监督 学习要求: 1、了解行政监督的概念、构成要素、特点、作用和理论。 2、掌握行政监督的原则、体制和机制。 学习重点: 2、行政监督的原则和理论。 3、行政监督机制的改革和完善。 一、行政监督概述 (一)行政监督的概念 “监督”一词,在汉语中大体有两层意思:一是监察和督促。《后汉书﹒荀彧传》:“古之遣将,上设监督之重,下建副二之任。”意思是说,古代派兵打仗,一般在最高统帅旁边设若干官员,负责监察和督促元帅按皇帝的命令用兵;二是古代官名。如清代设十三仓监督,崇文门左右门翼监督等等。在英语中,“监督”一词“supervision”是一个复合词,其中“super”,是“在上”的意思,“vision”,是“看”的意思,二者合起来就是上对下的观察、指导和控制的意思,与汉语中“监督”的含义大体差不多。 所谓行政监督是指在公共行政管理过程中所进行的监察、督促和控制活动,是各类监督主体依法对国家行政机关及国家公务员在执行公务和履行职责时各种行政行为所实施的监察、督促和控制活动。 按照监督主体的不同,行政监督有广义和狭义之分。 所谓狭义的行政监督,是指以行政机关为主体的监督,即行政机关内部自身的相互监督,包括上级行政机关和行政领导者对下级行政机关及其国家公务员行政行为的监察、督促和控制;下级行政机关和国家公务员对上级行政机关和行政领导者行政行为的观察、批评和建议;还包括行政监察部门对所有行政机关及国家公务员的监察和督促、审计部门对行政机关财政财务运行情况的审计等等。 所谓广义的行政监督,是指以行政机关为客体的监督,即除了行政机关内部 223

监督之外,还包括执政党、国家权力机关、国家司法机关、社会团体、人民群众和新闻舆论等方面通过各种渠道和途径,对国家行政机关及其国家公务员的各种行政行为所进行的监察、督促和控制。 (二)行政监督的构成要素 行政监督的构成要素包括监督的主体、客体、内容和标准等四个方面。 1.行政监督主体 如果离开真实的主体,没有有效的制度和完善的机构作为载体,那幺,对行政机关及其行政人员的监督就成为一句空话。当然,不同的历史时期和不同性质的国家,具有不同的行政监督主体。从某种意义上说,对行政监督主体地位的确立体现了民主程度的差异。中国现阶段的行政监督主体,包括国家的行政监督和社会的行政监督两个方面。其中国家的行政监督有立法机关、司法机关以及行政机关、行政监察和审计部门等。社会的行政监督包括各种社会力量,如政党组织、社会团体、公民和新闻媒体等。 2.行政监督客体 行政监督主要是针对行政行为和行政权力的监督,而行政行为和行政权力的载体是国家行政机关及其国家公务员,所以行政监督的指向和客体应当是国家行政机关及其国家公务员。依法拥有行政管理权力、行使行政管理职能的非行政组织及其工作人员,也属于行政监督的客体。 3.行政监督内容 行政监督主体不是对国家行政机关及其国家公务员的任何行为进行监督,而只是对国家行政机关及其国家公务员在执行公务和履行职责时的失范行为和失效行为进行监督。所谓失范行为是指行政权力的使用者违反了法律的有关规定;失效行为是指在行政权力的运行过程中,尽管投入了相当多的人力、物力和财力,但仍然没有达到既定目标,行政效率低下等等。政府的违法行为和效率状态构成了行政监督的基本内容。 4.行政监督标准 行政监督内容的广泛性决定了监督标准的多维性。综观古今中外的行政监督,其标准主要来源于以下几个方面: 224

基于MT6752的 android 系统启动流程分析报告

基于MT6752的Android系统启动流程分析报告 1、Bootloader引导 (2) 2、Linux内核启动 (23) 3、Android系统启动 (23) 报告人: 日期:2016.09.03

对于Android整个启动过程来说,基本可以划分成三个阶段:Bootloader引导、Linux kernel启动、Android启动。但根据芯片架构和平台的不同,在启动的Bootloader阶段会有所差异。 本文以MTK的MT6752平台为例,分析一下基于该平台的Android系统启动流程。 1、Bootloader引导 1.1、Bootloader基本介绍 BootLoader是在操作系统运行之前运行的一段程序,它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备,目的就是引导linux操作系统及Android框架(framework)。 它的主要功能包括设置处理器和内存的频率、调试信息端口、可引导的存储设备等等。在可执行环境创建好之后,接下来把software装载到内存并执行。除了装载software,一个外部工具也能和bootloader握手(handshake),可指示设备进入不同的操作模式,比如USB下载模式和META模式。就算没有外部工具的握手,通过外部任何组合或是客户自定义按键,bootloader也能够进入这些模式。 由于不同处理器芯片厂商对arm core的封装差异比较大,所以不同的arm处理器,对于上电引导都是由特定处理器芯片厂商自己开发的程序,这个上电引导程序通常比较简单,会初始化硬件,提供下载模式等,然后才会加载通常的bootloader。 下面是几个arm平台的bootloader方案: marvell(pxa935) : bootROM + OBM + BLOB informax(im9815) : bootROM + barbox + U-boot mediatek(mt6517) : bootROM + pre-loader + U-boot broadcom(bcm2157) : bootROM + boot1/boot2 + U-boot 而对MT6752平台,MTK对bootloader引导方案又进行了调整,它将bootloader分为以下两个部分: (1) 第1部分bootloader,是MTK内部(in-house)的pre-loader,这部分依赖平台。 (2) 第2部分bootloader,是LK(little kernel的缩写,作用同常见的u-boot差不多),这部分依赖操作系统,负责引导linux操作系统和Android框架。 1.2、bootloader的工作流程 1.2.1 bootloader正常的启动流程 先来看启动流程图:

流程管理的七大核心要点

流程管理的七大核心要点 (对企业来说,在战略上应该是举重若轻,在战术上应该是举轻若重。举重若轻就是只做一件事,举轻若重就是把这件事的细节做好。) 一位管理学教授曾经说过:“在美国,90%的纠纷不是技术问题,而是服务。流程管理得好,大部分纠纷是可以避免的。”结合国内外先进企业的实践看,流程管理有七大要点。 流程管理的三个理由 企业选择流程管理有以下三个理由: 第一个理由是使全体员工围绕一个原则办事,避免制度放松。在企业运行中,制度的执行难和习惯性的放松,是企业的一个大问题。一件事情如果能在比制度更宽松的环境下通过,那么这个新的宽松的习惯就会成为一个不成文的“制度”。时间一长,所有的制度管理就变得很难推行。有的时候,制度在推行时,往往是各个部门在推销他自己分管的那个分支的“制度”,但他们推销的那个“制度”恰恰与企业整体运行关系很不和谐。所以,企业全体员工都围绕一个规则、一个制度办事,企业才能将战略变成行动。这就需要流程管理。 第二个理由是决策要扁平化。过去在目标管理中,每一级、每个人都有一个目标,但往往变成各自为政、各人为政。到了年底的时候,完成目标的,就算完成了;完不成目标的,年底已到,也无法补救了。在形势比较好的时候,每个人都能做好;在形势不好的时候,大家都做不好,控制都来不及。另外,在竞争中,有时会有较特殊或者大单合同需要特办的情况,会出现规范业务与特事特办的问题,百分之百的规范、百分之百的特事特办都不会提高效率。如何使规范业务与特事特办能够很好地平衡,这要求我们找到一个可以持续改进的管理手段——流程管理。 第三个理由是更关注过程。现在实行的流程管理,是把对目标的关注转化成为对目标和过程的共同关注,强调执行力。这就是企业需要进行流程再造的理由。 流程再造从简单做起 流程再造应先从简单做起。曾经有一家企业基础管理非常差,流程管理混乱。仓库里的库存有多少没有数;花多少钱买的、用了多少、还剩多少不清楚;产成品库存也是如此,账面上有几万吨原材料,其实都是空的。这完全是管理流程的问题。根据当时的问题,我作为管理顾问提出了强化控制与被控制,将重点放在监督上,以堵漏为主。现在,这个问题得以解决。 流程再造,重点是要简单明了,可操作性强,不管车间、班组如何交接,以简单为主,职责上墙,新来的员工在平时上班能够看到,知道自己该干什么。同时,建立流程时坚持以人为本,制度制定的越细,执行起来就越不到位,它是循序渐进的过程。当人员素质还达不到这种程度时,就会欲速则不达。 内部流程市场化 企业内部市场化就是将市场竞争的压力传递到企业内部(或每一员工),快速响应市场,采取有效的激励手段,从而调动企业员工的积极性,由被动工作变为主动创新,达到提高企业效率和员工满意度的双重效果。海尔集团实行的内部市场链已经进行了初步尝试。 在管理创新上,海尔经历了从TQM(1984年-1991年)到OEC管理(即日清日高、日事日毕管理法,主要目的是“日事日毕,日清日高;人人都管事,事事有人管”)到“吃休克鱼”方式的企业重组(1992年-1998年)再到现在的“市场链”为纽带的业务流程再造(1999年开始)三个阶段。其中,第三个阶段的管理创新,实质上是寻求企业业务流程和员工素质与国际化企业全面接轨,突破“大企业病”的桎梏,把市场经济中的利益调节机制引入企业内部,在集团整体调控下,把企业内部的上下流程、上下工序和岗位之间的业务关系由原来的单纯性行政机制(即纵向依靠自上而下的计划安排和行政指令,横向依靠会议调度和上级命令协调;下级只服从上级,只对上级负责)转变成平等的买卖关系、服务关系和契约关系,把每个人从的客体变为管理的主体,从管理者变为一个经营者,使每个人都成为一个成为自主经营、各负其责的企业“老板”。 海尔集团将“市场链”和业务流程再造有机结合,以索酬(S)、索赔(S)和跳闸(T)为手段,以流

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

价值流程图

价值流程图 价值流程图(Value Stream Mapping,简称VSM) [编辑] 价值流程图概述 价值流程图(Value Stream Mapping)是丰田精益制造(Lean Manufacturing)生产系统框架下的一种用来描述物流和信息流的形象化工具。它运用精益制造的工具和技术来帮助企业理解和精简生产流程。价值流程图的目的是为了辨识和减少生产过程中的浪费。浪费在这里被定义为不能够为终端产品提供增值的任何活动,并经常用于说明生产过程中所减少的“浪费”总量。VSM可以作为管理人员、工程师、生产制造人员、流程规划人员、供应商以及顾客发现浪费、寻找浪费根源的起点。从这点来说,VSM还是一项沟通工具。但是,VSM往往被用作战略工具、变革管理工具。 VSM通过形象化地描述生产过程中的物流和信息流,来达到上述工具目的。从原材料购进的那一刻起,VSM就开始工作了,它贯穿于生产制造的所有流程、步骤,直到终端产品离开仓储。 对生产制造过程中的周期时间、当机时间、在制品库存、原材料流动、信息流动等情况进行描摹和记录,有助于形象化当前流程的活动状态,并有利于对生产流程进行指导,朝向理想化方向发展。

VSM通常包括对“当前状态”和“未来状态”两个状态的描摹,从而作为精益制造战略的基础。 价值流程图(VSM)分析的是两个流程:第一个是信息(情报)流程,即从市场部接到客户订单或市场部预测客户的需求开始,到使之变成采购计划和生产计划的过程;第二个是实物流程,即从供应商供应原材料入库开始,随后出库制造、成品入库、产品出库,直至产品送达客户手中的过程。此外,实物流程中还包括产品的检验、停放等环节。 企业在进行价值流程图(VSM)分析时,首先要挑选出典型的产品作为深入调查分析的对象,从而绘制出信息(情报)流程和实物流程的现状图,然后将现状图与信息(情报)和实物流程的理想状况图相比较,发现当前组织生产过程中存在的问题点,进而针对问题点提出改进措施。 [编辑] 价值流程图的历史 1980年代,丰田公司的首席工程师Taiichi Ohno与sensei Shigeo Shingo率先运用去除生产浪费的方法来获取竞争优势,他们的主要出发点是提高生产效率,而非提高产品质量。之所以这么做,是因为他们认为生产效率的提高将有助于精益制造,从而能够暴露出系统中的深层的浪费问题和质量问题。因此,对浪费问题发起的系统性攻击也就是对质量问题的深层原因展开攻击,对根本性的管理问题展开攻击。丰田生产系统中认定的七种常见浪费(括号中内容为Jones的表述): 1。生产过剩(快于必要的速度); 2。等待; 3。运输(搬运);

工程施工全过程详解(汇总版)

工程施工全过程详解录目 2 ..................................................................................................................... 一、前期施工准备阶段.地质勘察1. 2 ....................................................................................................................................................... 文物勘察2. 3 ....................................................................................................................................................... 建筑边坡与深基坑工程的设计方案评审3. 3 ................................................................................... 工程测量定位4. 3 ............................................................................................................................................. 施工现场市政临水临电报批5. 4 ............................................................................................................. 三通一平6. 4 ....................................................................................................................................................... 工地围栏及大门建设7. 4 ............................................................................................................................. 办公区、生活区搭建8. 4 ............................................................................................................................. 组织员工培训及图纸会审9. 4 .................................................................................................................. 5 ................................................................................................................. 二、地基与基础施工阶段基坑放线1. 5 ....................................................................................................................................................... 基坑降水施工 2. ............................................................................................................................................ .5第一次土方开挖为桩基施工作准备 3. 5 ............................................................................................. 基坑支护4. 5 .......................................................................................................................................................

Android开机启动流程样本

Android的开机流程 1. 系统引导bootloader 1) 源码: bootable/bootloader/* 2) 说明: 加电后, CPU将先执行bootloader程序, 此处有三种选择 a) 开机按Camera+Power启动到fastboot, 即命令或SD卡烧写模式, 不加载内核及文件系统, 此处能够进行工厂模式的烧写 b) 开机按Home+Power启动到recovery模式, 加载recovery.img, recovery.img包含内核, 基本的文件系统, 用于工程模式的烧写 c) 开机按Power, 正常启动系统, 加载boot.img, boot.img包含内核, 基本文件系统, 用于正常启动手机( 以下只分析正常启动的情况) 2. 内核kernel 1) 源码: kernel/* 2) 说明: kernel由bootloader加载 3. 文件系统及应用init 1) 源码: system/core/init/* 2) 配置文件: system/rootdir/init.rc, 3) 说明: init是一个由内核启动的用户级进程, 它按照init.rc中的设置执行: 启动服务( 这里的服务指linux底层服务, 如adbd提供adb支持, vold提供SD卡挂载等) , 执行命令和按其中的配置语句执行相应功能 4. 重要的后台程序zygote 1) 源码: frameworks/base/cmds/app_main.cpp等 2) 说明: zygote是一个在init.rc中被指定启动的服务, 该服务对应的命令是/system/bin/app_process

工程施工项目流程管理完整版

工程施工项目流程管理 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】

式 工程项目管理模 Gongcheng xiangmu guanli moshi 工程总承包是指从事工程总承包的企业(以下简称工程总承包企业)受业主委托,按照合同约定对工程项目的勘察、设计、采购、施工、试运行(竣工验收)等实行全过程或若干阶段的承包。工程总承包主要有如下方式: 1.设计—采购—施工(Engineering Procurement Construction,简称EPC)/交钥匙总承包(Lump Sum Key,简称LSTK) 设计—采购—施工总承包是指工程总承包企业按照合同约定,承担工程项目的设计、采购、施工、试运行服务等工作,并对承包工程的质量、安全、工期、成本全面 负责。 交钥匙总承包是设计采购施工总承包业务和责任的延伸,最终是向业主提交一个满足使用功能、具备使用条件的工程项目。 2.设计—施工总承包(Design-Build,简称D-B) 设计—施工总承包是指工程总承包企业按照合同约定,承担工程项目设计和施工,并对承包工程的质量、安全、工期、成本全面负责。 根据工程项目的不同规模、类型和业主要求,工程总承包还可采用设计—采购总承包(Engineering-Procurement,简称E-P)、采购—施工总承包(Procurement- Construction,简称P-C)等方式。 工程项目管理是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同规定,代表业主对工程项目的组织实施进行全过程或若干阶段的管

Android SystemBar启动流程分析

Android SystemBar启动流程分析 SystemBars的服务被start时,最终会调用该类的onNoService()方法。 @Override public void start() { if (DEBUG) Log.d(TAG, "start"); ServiceMonitor mServiceMonitor = new ServiceMonitor(TAG, DEBUG, mContext, Settings.Secure.BAR_SERVICE_COMPONENT, this); mServiceMonitor.start(); // will call onNoService if no remote service is found } @Override public void onNoService() { if (DEBUG) Log.d(TAG, "onNoService"); createStatusBarFromConfig(); // fallback to using an in-process implementation } private void createStatusBarFromConfig() { … mStatusBar = (BaseStatusBar) cls.newInstance(); … mStatusBar.start(); } BaseStatusBar是一个抽象类,故调用其子类的PhoneStatusBar的start 函数。 @Override public void start() { … super.start(); … } 子类的start又调用了父类的start public void start() { … createAndAddWindows(); … }

价值流程图

价值流程图(Value Stream Mapping,简称VSM) 价值流程图概述 价值流程图(Value Stream Mapping)是丰田精益制造(Lean Manufacturing)生产系统框架下的一种用来描述物流和信息流的形象化工具。它运用精益制造的工具和技术来帮助企业理解和精简生产流程。价值流程图的目的是为了辨识和减少生产过程中的浪费。浪费在这里被定义为不能够为终端产品提供增值的任何活动,并经常用于说明生产过程中所减少的“浪费”总量。VSM可以作为管理人员、工程师、生产制造人员、流程规划人员、供应商以及顾客发现浪费、寻找浪费根源的起点。从这点来说,VSM还是一项沟通工具。但是,VSM往往被用作战略工具、变革管理工具。 VSM通过形象化地描述生产过程中的物流和信息流,来达到上述工具目的。从原材料购进的那一刻起,VSM就开始工作了,它贯穿于生产制造的所有流程、步骤,直到终端产品离开仓储。 对生产制造过程中的周期时间、当机时间、在制品库存、原材料流动、信息流动等情况进行描摹和记录,有助于形象化当前流程的活动状态,并有利于对生产流程进行指导,朝向理想化方向发展。 VSM通常包括对“当前状态”和“未来状态”两个状态的描摹,从而作为精益制造战略的基础。 价值流程图(VSM)分析的是两个流程:第一个是信息(情报)流程,即从市场部接到客户订单或市场部预测客户的需求开始,到使之变成采购计划和生产计划的过程;第二个是实物流程,即从供应商供应原材料入库开始,随后出库制造、成品入库、产品出库,直至产品送达客户手中的过程。此外,实物流程中还包括产品的检验、停放等环节。 企业在进行价值流程图(VSM)分析时,首先要挑选出典型的产品作为深入调查分析的对象,从而绘制出信息(情报)流程和实物流程的现状图,然后将现状图与信息(情报)和实物流程的理想状况图相比较,发现当前组织生产过程中存在的问题点,进而针对问题点提出改进措施。

Android系统启动过程详解

Android系统启动过程详解 Android系统启动过程 首先Android框架架构图:(来自网上,我觉得这张图看起来很清晰) Linux内核启动之后就到Android Init进程,进而启动Android相关的服务和应用。 启动的过程如下图所示:(图片来自网上,后面有地址)

下面将从Android4.0源码中,和网络达人对此的总结中,对此过程加以学习了解和总结, 以下学习过程中代码片段中均有省略不完整,请参照源码。

一Init进程的启动 init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行, 并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。 启动过程就是代码init.c中main函数执行过程:system\core\init\init. c 在函数中执行了:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听…… 下面看两个重要的过程:rc文件解析和服务启动。 1 rc文件解析 .rc文件是Android使用的初始化脚本文件(System/Core/Init/readm e.txt中有描述: four broad classes of statements which are Actions, Commands, Services, and Options.) 其中Command 就是系统支持的一系列命令,如:export,hostname,mkdir,mount,等等,其中一部分是linux 命令, 还有一些是android 添加的,如:class_start :启动服务,class_stop :关闭服务,等等。 其中Options是针对Service 的选项的。 系统初始化要触发的动作和要启动的服务及其各自属性都在rc脚本文件中定义。具体看一下启动脚本:\system\core\rootdir\init.rc 在解析rc脚本文件时,将相应的类型放入各自的List中: \system\core\init\Init_parser.c :init_parse_config_file( )存入到 action_queue、action_list、service_list中,解析过程可以看一下parse_config函数,类似状态机形式挺有意思。 这其中包含了服务:adbd、servicemanager、vold、ril-daemon、deb uggerd、surfaceflinger、zygote、media…… 2 服务启动 文件解析完成之后将service放入到service_list中。 文件解析完成之后将service放入到service_list中。 \system\core\init\builtins.c

AndroidL系统启动及加载流程分析

Android L系统启动及加载流程分析 1、概述 Android L的启动可以分为几个步骤:Linux内核启动、init进程启动、native系统服务及java系统服务启动、Home启动,主要过程如下图: 图1 整个启动流程跟4.4及之前的版本相差不多,只是有个别不同之处,本文我们主要分析Linux内核启动之后的过程。

2、启动过程分析 2.1 init进程启动 当系统内核加载完成之后,会启动init守护进程,它是内核启动的第一个用户级进程,是Android的一个进程,进程号为1,init进程启动后执行入口函数main(),主要操作为: 图2 AndroidL上将selinux的安全等级提高了,设为了enforcing模式,4.4上是permissive模式。 解析rc脚本文件,即init.rc脚本,该文件是Android初始化脚本,定义了一系列的动作和执行这些动作的时间阶段e aryl-init、init、early-boot、boot、post-fs等阶段。init进程main 函数中会根据这些阶段进行解析执行。AndroidL上为了流程更清晰,增加了charger(充电开机)、ffbm(工厂模式)、以及late-init阶段,实际上这些阶段是对其他阶段的组合执行,比如late-init:

2.2 ServiceManager的启动 servicemanager的启动就是init进程通过init.rc脚本启动的: 源码在frameworks/native/cmds/servicemanager/service_manager.c中,servicemanager是服务管理器,它本身也是一个服务(handle=0),通过binder调用,为native和Java系统服务提供注册和查询服务的,即某个服务启动后,需要将自己注册到servicemanager中,供其他服务或者应用查询使用。AndroidL上servicemanger中在处理注册和查询动作之前添加了selinux安全检测相关的处理。 2.3 SurfaceFinger、MediaServer进程启动 Android4.4以前,surfacefinger的启动根据属性system_init.startsurfaceflinger,决定是通过init.rc启动还是systemserver进程启动,之后的版本包括AndoridL都是通过init.rc启动的: 启动后会向servicemanager进程注册服务中,该服务启动时主要功能是初始化整个显

android开机启动流程简单分析

android开机启动流程简单分析 android启动 当引导程序启动Linux内核后,会加载各种驱动和数据结构,当有了驱动以后,开始启动Android系统同时会加载用户级别的第一个进程init(system\core\init\init.cpp)代码如下: int main(int argc, char** argv) { ..... //创建文件夹,挂载 // Get the basic filesystem setup we need put together in the initramdisk // on / and then we'll let the rc file figure out the rest. if (is_first_stage) { mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755"); mkdir("/dev/pts", 0755); mkdir("/dev/socket", 0755); mount("devpts", "/dev/pts", "devpts", 0, NULL); #define MAKE_STR(x) __STRING(x) mount("proc", "/proc", "proc", 0, "hidepid=2,gid=" MAKE_STR(AID_READPROC)); mount("sysfs", "/sys", "sysfs", 0, NULL); } ..... //打印日志,设置log的级别 klog_init(); klog_set_level(KLOG_NOTICE_LEVEL); ..... Parser& parser = Parser::GetInstance(); parser.AddSectionParser("service",std::make_unique()); parser.AddSectionParser("on", std::make_unique()); parser.AddSectionParser("import", std::make_unique()); // 加载init.rc配置文件 parser.ParseConfig("/init.rc"); } 加载init.rc文件,会启动一个Zygote进程,此进程是Android系统的一个母进程,用来启动Android的其他服务进程,代码: 从Android L开始,在/system/core/rootdir 目录中有4 个zygote 相关的启动脚本如下图:

相关主题