blob: 9f0cb42212cddfb48ad555bdd00d49c448ba92a2 [file] [log] [blame]
Jaewan Kim0ccb99b2023-02-08 16:10:12 +09001/*
2 * Copyright 2023 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jaewan Kim329c7102023-08-30 16:50:55 +090017package com.android.pvmfw;
Jaewan Kim0ccb99b2023-02-08 16:10:12 +090018
Jaewan Kim329c7102023-08-30 16:50:55 +090019import com.android.pvmfw.test.host.Pvmfw;
Jaewan Kim0ccb99b2023-02-08 16:10:12 +090020
21import java.io.File;
22import java.io.IOException;
23
24/** CLI for {@link com.android.microdroid.test.host.Pvmfw}. */
25public class PvmfwTool {
26 public static void printUsage() {
27 System.out.println("pvmfw-tool: Appends pvmfw.bin and config payloads.");
Jaewan Kim59009e92024-05-17 18:12:30 +090028 System.out.println(" Requires BCC. VM Reference DT, VM DTBO, and Debug policy");
29 System.out.println(" can optionally be specified");
Jaewan Kim541cb0c2024-03-12 21:09:16 +090030 System.out.println(
Jaewan Kim59009e92024-05-17 18:12:30 +090031 "Usage: pvmfw-tool <out> <pvmfw.bin> <bcc.dat> [VM reference DT] [VM DTBO] [debug"
Jaewan Kim541cb0c2024-03-12 21:09:16 +090032 + " policy]");
Jaewan Kim0ccb99b2023-02-08 16:10:12 +090033 }
34
35 public static void main(String[] args) {
Jaewan Kim541cb0c2024-03-12 21:09:16 +090036 if (args.length < 3 || args.length > 6) {
Jaewan Kim0ccb99b2023-02-08 16:10:12 +090037 printUsage();
38 System.exit(1);
39 }
40
41 File out = new File(args[0]);
Jaewan Kim541cb0c2024-03-12 21:09:16 +090042 File pvmfwBin = new File(args[1]);
43 File bccData = new File(args[2]);
Jaewan Kim541cb0c2024-03-12 21:09:16 +090044
Jaewan Kim59009e92024-05-17 18:12:30 +090045 File vmReferenceDt = null;
Jaewan Kim541cb0c2024-03-12 21:09:16 +090046 File vmDtbo = null;
47 File dp = null;
Jaewan Kim59009e92024-05-17 18:12:30 +090048 if (args.length > 3) {
49 vmReferenceDt = new File(args[3]);
50 }
Jaewan Kim541cb0c2024-03-12 21:09:16 +090051 if (args.length > 4) {
52 vmDtbo = new File(args[4]);
53 }
54 if (args.length > 5) {
55 dp = new File(args[5]);
56 }
Jaewan Kim0ccb99b2023-02-08 16:10:12 +090057
58 try {
Jaewan Kim59009e92024-05-17 18:12:30 +090059 Pvmfw.Builder builder =
Jaewan Kim541cb0c2024-03-12 21:09:16 +090060 new Pvmfw.Builder(pvmfwBin, bccData)
61 .setVmReferenceDt(vmReferenceDt)
62 .setDebugPolicyOverlay(dp)
Jaewan Kim59009e92024-05-17 18:12:30 +090063 .setVmDtbo(vmDtbo);
64 if (vmReferenceDt == null) {
65 builder.setVersion(1, 1);
66 } else {
67 builder.setVersion(1, 2);
68 }
69
70 Pvmfw pvmfw = builder.build();
Jaewan Kim541cb0c2024-03-12 21:09:16 +090071 pvmfw.serialize(out);
Jaewan Kim0ccb99b2023-02-08 16:10:12 +090072 } catch (IOException e) {
73 e.printStackTrace();
74 printUsage();
75 System.exit(1);
76 }
77 }
78}