皮皮网
皮皮网

【功放源码大全】【问道sf源码】【自动打鱼源码】launcher源码分析

来源:mariadb 10.1源码安装 发表时间:2024-12-29 02:01:53

1.yarn源码分析(四)AppMaster启动
2.KubeVirt网络源码分析
3.如何设置系统唯一的 launcher

launcher源码分析

yarn源码分析(四)AppMaster启动

       在容器分配完成之后,源码启动容器的分析代码主要在ContainerImpl.java中进行。通过状态机转换,源码container从NEW状态向其他状态转移时,分析会调用RequestResourceTransition对象。源码RequestResourceTransition负责将所需的分析功放源码大全资源进行本地化,或者避免资源本地化。源码若需本地化,分析还需过渡到LOCALIZING状态。源码为简化理解,分析此处仅关注是源码否进行资源本地化的情况。

       为了将LAUNCH_CONTAINER事件加入事件处理队列,分析调用了sendLaunchEvent方法。源码问道sf源码该事件由ContainersLauncher负责处理。分析ContainersLauncher的源码handle方法中,使用一个ExecutorService(线程池)容器Launcher。ContainerLaunch实现了Callable接口,其call方法生成并执行launch_container脚本。以MapReduce框架为例,自动打鱼源码该脚本在hadoop.tmp.dir/application name/container name目录下生成,其主要作用是启动MRAppMaster进程,即MapReduce的ApplicationMaster。

KubeVirt网络源码分析

       在KubeVirt的网络架构中,virt-launcher与虚拟机之间建立了一对一的对应关系,即在每个pod中运行一台虚拟机。问道1.622源码本文将聚焦于网络组件的分析。

       下图展示了KubeVirt的网络体系,三个实线框表示从外到里依次为:Kubernetes工作节点、工作节点上的POD、以及POD中运行的虚拟机。三个虚线框从下到上分别为:Kubernetes网络(Kubernetes CNI负责配置)、小高源码libvirt网络,以及虚拟机网络。本文仅关注libvirt网络与虚拟机网络。

       在kubevirt中,LibvirtDomainManager类的preStartHook方法在虚拟机启动前执行,通过调用SetupPodNetwork方法为虚拟机准备网络环境。

       SetupPodNetwork方法执行三个关键步骤,分别对应discoverPodNetworkInterface、preparePodNetworkInterfaces和StartDHCP方法。discoverPodNetworkInterface方法收集pod的网络接口信息,包括IP和MAC地址。这些信息将通过DHCP协议传递给虚拟机。为确保虚拟机能接收这些信息,preparePodNetworkInterfaces方法对容器网络进行相应调整。

       此方法会启动一个只提供一个DHCP客户端的DHCP服务器(SingleClientDHCPServer)。DHCP服务提供给虚拟机的不仅仅是IP地址,还包括网关信息和路由信息。此过程确保虚拟机在KubeVirt环境中能够正常访问网络。

       本文以KubeVirt 0.4.1版本的源码为例分析网络部分,后续将对更最新版本的KubeVirt virt-lancher网络功能进行深入探索。

如何设置系统唯一的 launcher

       ã€€ã€€å®šä¹‰ä¸€ä¸ªç§æœ‰çš„filter选项,然后用这个选项来过滤HOME.

       ã€€ã€€ä¸€èˆ¬æƒ…况下我们使用Manifest中定义的<category android:name="android.intent.category.HOME"来过滤的,

       ã€€ã€€æˆ‘们现在增加一个私有的HOME_FIRST过滤。

       ã€€ã€€åœ¨Intent.java(frameworks/base/core/java/android/content/Intent.java)中添加两行代码

       ã€€ã€€//lixinso:添加CATEGORY_HOME_FIRST

       ã€€ã€€@SdkConstant(SdkConstantType.INTENT_CATEGORY)

       ã€€ã€€public static final String CATEGORY_HOME_FIRST = "android.intent.category.HOME_FIRST";

       ã€€ã€€3)修改和CATEGORY_HOME相关的所有的地方,都改成HOME_FIRST,主要是framework中的这几个地方:

       ã€€ã€€frameworks/base/services/java/com/android/server/am/ActivityManagerService.java中

       ã€€ã€€//intent.addCategory(Intent.CATEGORY_HOME);

       ã€€ã€€æ”¹æˆintent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso:

       ã€€ã€€//if (r.intent.hasCategory(Intent.CATEGORY_HOME)) {

       ã€€ã€€æ”¹æˆif (r.intent.hasCategory(Intent.CATEGORY_HOME_FIRST)) { //lixinso: Intent.CATEGORY_HOME -> Intent.CATEGORY_HOME_FIRST

       ã€€ã€€frameworks/base/services/java/com/android/server/am/HistoryRecorder.java中

       ã€€ã€€// _intent.hasCategory(Intent.CATEGORY_HOME) &&

       ã€€ã€€æ”¹æˆ _intent.hasCategory(Intent.CATEGORY_HOME_FIRST) && //lixinso: Intent.CATEGORY_HOME->Intent.CATEGORY_HOME_FIRST

       ã€€ã€€frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java中

       ã€€ã€€//mHomeIntent.addCategory(Intent.CATEGORY_HOME);

       ã€€ã€€æ”¹æˆ mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso

       ã€€ã€€frameworks/policies/base/mid/com/android/internal/policy/impl/RecentApplicationsDialog.java中

       ã€€ã€€//new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),0);

       ã€€ã€€æ”¹æˆ new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST),0); //lixinso

       ã€€ã€€frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java中

       ã€€ã€€//mHomeIntent.addCategory(Intent.CATEGORY_HOME);

       ã€€ã€€æ”¹æˆ mHomeIntent.addCategory(Intent.CATEGORY_HOME_FIRST); //lixinso

       ã€€ã€€frameworks/policies/base/phone/com/android/internal/policy/impl/RecentApplicationsDialog.java中

       ã€€ã€€//ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME),0);

       ã€€ã€€æ”¹æˆ ResolveInfo homeInfo = pm.resolveActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME_FIRST),0); //lixinso

       ã€€ã€€4) 写一个自己的Launcher.

       ã€€ã€€å¯ä»¥å‚考android sample中的Launcher,或者android源代码中的 /packages/apps/Launcher 来写。

       ã€€ã€€åœ¨Launcher中标记其是不是Launcher的最关键的代码时Manifest中的filter:android:name="android.intent.category.HOME"

       ã€€ã€€çŽ°åœ¨æˆ‘们定义了自己的filter,那么,我们在我们自己写的Launcher中将Manifest改为:

       ã€€ã€€<application android:process="android.process.acore3" android:icon="@drawable/icon" android:label="@string/app_name">

       ã€€ã€€<activity android:name=".FirstAppActivity"

       ã€€ã€€android:label="@string/app_name">

       ã€€ã€€<intent-filter>

       ã€€ã€€<action android:name="android.intent.action.MAIN" />

       ã€€ã€€<category android:name="android.intent.category.HOME_FIRST" />

       ã€€ã€€<category android:name="android.intent.category.DEFAULT" />

       ã€€ã€€<category android:name="android.intent.category.MONKEY" />

       ã€€ã€€</intent-filter>

       ã€€ã€€</activity>

       ã€€ã€€</application>

       ã€€ã€€ç„¶åŽå°†ç¼–译好的apk放到/out/target/product/generic/system/app目录下。

       ã€€ã€€5)将Android自带的Launcher删除掉,包括源代码(packages/apps/Launcher)和apk(/out/target/product/generic/system/app/Launcher.apk)。

       ã€€ã€€6)

       ã€€ã€€åšå®Œè¿™äº›å·¥ä½œï¼Œå°±å¯ä»¥é‡æ–°ç¼–译Android了,我们可以编译修改过的几个相关的包。

       ã€€ã€€å¦‚果之前编译过了Android源码,可以用mmm命令来编译部分的改动。

       ã€€ã€€è¿™é‡Œéœ€è¦è¿™æ ·ç¼–译:

       ã€€ã€€$ . build/envsetup.sh

       ã€€ã€€$ mmm frameworks/base

       ã€€ã€€$ mmm frameworks/base/services/java

       ã€€ã€€$ mmm frameworks/policies/base/mid

       ã€€ã€€$ mmm frameworks/policies/base/phone

       ã€€ã€€7)

       ã€€ã€€ç¼–译完成后重新生成img文件。

       ã€€ã€€$ make snod

       ã€€ã€€8) 现在可以启动Android模拟器来看效果了。

       ã€€ã€€é¦–先设置环境变量:

       ã€€ã€€$ export ANDROID_PRODUCT_OUT= ./out/target/product/generic

       ã€€ã€€ç„¶åŽåˆ‡æ¢åˆ°

       ã€€ã€€$ cd ./out/host/linux-x/bin

       ã€€ã€€è¿è¡Œ

       ã€€ã€€$ ./emulator

       ã€€ã€€è¿™æ ·æˆ‘们启动的模拟器里面用的image就是我们刚才编译好的自己定制的东西了。

       ã€€ã€€ä»Žæ¨¡æ‹Ÿå™¨ä¸Šå¯ä»¥çœ‹åˆ°å¯åŠ¨çš„Launcher是我们自己的Launcher,不会出现默认的Launcher了,也不会出现选择界面。

相关栏目:休闲