A factory bundle is an archive file containing all files you need to setup Chromium OS factory environment.
Here is a list of files in a typical factory bundle:
complete/ complete_script_sample.sh factory_shim/ factory_install_shim.bin firmware/ chromeos-firmwareupdate firmware_images/ bios.bin ec.bin pd.bin hwid/ hwid_v3_bundle_SAMUS.sh release_image/ chromeos_9334.72.0_samus_recovery_stable-channel_mp-v3.bin test_image/ ChromeOS-test-R58-9334.72.0-samus.bin toolkit/ install_factory_toolkit.run netboot/ tftp/ chrome-bot/ samus/ cmdline.sample vmlinuz dnsmasq.conf image.net.bin setup/ bin/ cgpt futility lib/ cros_image_common.sh shflags .default_board cros_docker.sh cros_payload edit_lsb_factory.sh extract_firmware_updater.sh factory_common.sh fmap.py make_factory_package.sh merge_factory_usbimg.sh miniomaha_engine.py miniomaha.py miniomaha_test.py mount_partition.sh netboot_firmware_settings.py NETBOOT.md pygpt README.md resize_image_fs.sh start_download_server.sh MANIFEST.yaml README doc.zip start_download_server.sh
There should be exactly one file in this folder, with arbitrary file name.
factory_installer
will deploy release image into DUTs.You can get release images from CPFE (select image type RECOVERY_IMAGE
).
There should be exactly one file in this folder, with arbitrary file name.
factory_installer
will deploy test image into DUTs.You can get test images from CPFE (select image type TEST_IMAGE_ARCHIVE
).
There should be exactly one file in this folder, with arbitrary file name.
factory_installer
will deploy factory toolkit into DUTs.sync_shopfloor
.You can get factory toolkit installers from CPFE (select image type FACTORY_IMAGE_ARCHIVE
)
There should be exactly one file in this folder, with arbitrary file name.
factory_installer
will deploy HWID bundle into DUTs.You can get HWID bundles from CPFE (select image type FACTORY_IMAGE_ARCHIVE
).
There could be at most one file in this folder, with arbitrary file name.
factory_installer
will run firmware updater to flash firmware (EC, AP, and possibly PD) when imaging finished.update_firmware
.You can get a firmware updater from a release image by running factory/setup/extract_firmware_updater.sh -i /path/to/release_image
There could be at most one file in this folder, with arbitrary file name.
factory_installer
will run the complete script after firmware updater.You can find a complete script template in factory/setup/complete_script_sample.sh
.
finalize_bundle
will extract firmware images from firmware updater and put them into this folder.
finalize_bundle
will extract factory shim image from FACTORY_IMAGE_ARCHIVE
, patch its server address, and put it into this folder.
finalize_bundle
will extract netboot firmware image.net.bin
and netboot kernel vmlinuz
from FACTORY_IMAGE_ARCHIVE
, patch their server address, and put them into this folder.
Also, there will be two files, cmdline.sample
and dnsmasq.conf
, which are generated by finalize_bundle
to help you setup TFTP service for netboot.
This folder is extracted from FACTORY_IMAGE_ARCHIVE
by finalize_bundle
, contains many useful scripts, such as:
cros_docker.sh
extract_firmware_updater.sh
make_factory_package.sh
mount_partition.sh
netboot_firmware_settings.py
resize_image_fs.sh
This script file is only for Mini-Omaha backward compatibility. It will invoke make_factory_package.sh
to prepare files for Mini-Omaha in the first time, and then start Mini-Omaha service.
If you just want a bundle for Umpire to import, you can manually create an archive file (zip file or {gzip|bzip2|xz} compressed tarball) containing the following folders with corresponding files inside.
complete
firmware
hwid
release_image
test_image
toolkit
Or you can just use the partial update feature of Umpire for testing. No need to always create a factory bundle for network installation.
To create a complete factory bundle, you need to run finalize_bundle
. finalize_bundle
takes a manifest file MANIFEST.yaml
and produces a factory bundle.
Here is a template MANIFEST.yaml
:
board: samus bundle_name: 20170628_dvt server_url: http://12.34.56.78:8080/ firmware: local release_image: 9334.72.0 test_image: 9334.72.0 toolkit: 9688.0.0
board
Board name.
bundle_name
{YYYYMMDD}_{proto|evt|dvt|pvt}
server_url
http://{server ip}:{server port}/
finalize_bundle
will inject this address into netboot firmware and factory shim.
This is an optional field.
firmware
There are two valid values:
local
: User manually prepares a firmware updater in firmware/
.release_image
: Use firmware updater in the release image.This is an optional field. Default value is release_image
.
hwid
There are two valid values:
real
: There should be a real HWID bundle in hwid/
.none
: finalize_bundle
will create a dummy HWID bundle.This is an optional field. Default value is real
.
release_image
There are two kinds of valid values:
local
: User manually prepares a release image in release_image/
.{xxxx.y.z}
: Release image version for finalize_bundle
to download. If there is already one file in release_image/
, finalize_bundle
will check whether the version matches or not.test_image
There are two kinds of valid values:
local
: User manually prepares a test image in test_image/
.{xxxx.y.z}
: Test image version for finalize_bundle
to download. If there is already one file in test_image/
, finalize_bundle
will check whether the version matches or not.toolkit
There are two kinds of valid values:
local
: User manually extracts FACTORY_IMAGE_ARCHIVE
in bundle directory.{xxxx.y.z}
: FACTORY_IMAGE_ARCHIVE
version for finalize_bundle
to download. finalize_bundle
will always download FACTORY_IMAGE_ARCHIVE
if toolkit is set to non-local.Currently non-local resources can only be accessed by Google internally. Partners can only use local resources.
With MANIFEST.yaml
, we can run finalize_bundle
now.
We strongly recommend you to install lbzip2
, which can help you reduce finalize_bundle
execution time by a lot.
To get finalize_bundle
, please checkout factory repository:
git clone https://chromium.googlesource.com/chromiumos/platform/factory
Create a directory with name factory_bundle_{board}_{bundle_name}
:
mkdir factory_bundle_samus_20170628_dvt cd factory_bundle_samus_20170628_dvt/
Prepare firmware updater if you want to use local firmware updater:
ln /path/to/chromeos-firmwareupdate firmware/
Prepare release image if you want to use local release image:
ln /path/to/chromeos_9334.72.0_samus_recovery_stable-channel_mp-v3.bin release_image/
Prepare test image if you want to use local test image:
tar -JxvC test_image/ </path/to/ChromeOS-test-R58-9334.72.0-samus.tar.xz
Extract factory zip (FACTORY_IMAGE_ARCHIVE
) if you want to use a local one:
unzip /path/to/ChromeOS-factory-R61-9688.0.0-samus.zip
Prepare HWID bundle if you want to use local HWID bundle:
ln /path/to/hwid_v3_bundle_SAMUS.sh hwid/
Add your MANIFEST.yaml
if you don't have it in factory zip or you want to use a new one:
cp /path/to/MANIFEST.yaml MANIFEST.yaml
Finally, run finalize_bundle
:
/path/to/factory/bin/finalize_bundle .
After minutes, you will get a complete factory bundle. Cheers!
Work In Progress