tree: 4a33fdd7fd16c940130bb63f2f55c17905f351ed [path history] [tgz]
  1. app/
  2. boards/
  3. cmake/
  4. drivers/
  5. dts/
  6. emul/
  7. fake/
  8. include/
  9. linker/
  10. mock/
  11. program/
  12. scripts/
  13. shim/
  14. subsys/
  15. test/
  16. zmake/
  17. .pylintrc
  18. CMakeLists.txt
  19. DIR_METADATA
  20. firmware_builder.py
  21. fpu.cmake
  22. gcov.tmpl.sh
  23. hayato_get_cfg.sh
  24. Kconfig
  25. Kconfig.accelgyro_bmi
  26. Kconfig.accelgyro_icm
  27. Kconfig.adc
  28. Kconfig.ap_hang_detect
  29. Kconfig.ap_power
  30. Kconfig.battery
  31. Kconfig.board_version
  32. Kconfig.body_detection
  33. Kconfig.cbi
  34. Kconfig.cec
  35. Kconfig.charger
  36. Kconfig.chargesplash
  37. Kconfig.console
  38. Kconfig.console_cmd_mem
  39. Kconfig.debug_assert
  40. Kconfig.defaults
  41. Kconfig.defaults-arm
  42. Kconfig.detachable_base
  43. Kconfig.espi
  44. Kconfig.fingerprint
  45. Kconfig.flash
  46. Kconfig.header
  47. Kconfig.host_interface
  48. Kconfig.i2c
  49. Kconfig.init_priority
  50. Kconfig.ioex
  51. Kconfig.keyboard
  52. Kconfig.led
  53. Kconfig.led_dt
  54. Kconfig.mkbp_event
  55. Kconfig.motionsense
  56. Kconfig.panic
  57. Kconfig.pd
  58. Kconfig.pd_console_cmd
  59. Kconfig.pd_discharge
  60. Kconfig.pd_frs
  61. Kconfig.pd_host_cmd
  62. Kconfig.pd_int_shared
  63. Kconfig.pd_meas_vbus
  64. Kconfig.pd_usbc_device_type
  65. Kconfig.pd_vbus_detection
  66. Kconfig.pmic
  67. Kconfig.port80
  68. Kconfig.powerseq
  69. Kconfig.ppc
  70. Kconfig.random
  71. Kconfig.retimer
  72. Kconfig.rollback
  73. Kconfig.rsa
  74. Kconfig.rtc
  75. Kconfig.sensor_devices
  76. Kconfig.stacks
  77. Kconfig.svdm_rsp
  78. Kconfig.system
  79. Kconfig.tabletmode
  80. Kconfig.tasks
  81. Kconfig.tcpm
  82. Kconfig.temperature
  83. Kconfig.test
  84. Kconfig.throttle_ap
  85. Kconfig.timer
  86. Kconfig.touchpad
  87. Kconfig.usb_charger
  88. Kconfig.usb_mux
  89. Kconfig.usb_update
  90. Kconfig.usba
  91. Kconfig.usbc
  92. Kconfig.usbc_common_altmode
  93. Kconfig.usbc_ss_mux
  94. Kconfig.watchdog
  95. Kconfig.wireless_charger
  96. Makefile.cq
  97. module.yml
  98. pigweed-vpython3
  99. README.md
  100. tcpmv2.cmake
zephyr/README.md

Zephyr EC

Introduction

Zephyr EC is an effort to create an industry-standard Embedded Controller implementation for use primarily on laptops. It is born out of the Chromium OS EC.

native-posix development

Zephyr can be built to run on your host machine, making it easier to develop and test features. This is called the native_posix build.

To build it::

  cd ~/chromium/src/platform/ec
  zmake build minimal-posix

and run it:

  build/zephyr/minimal-posix/build-singleimage/zephyr/zephyr.elf

Check the display for the pseudotty and connect an xterm to it, e.g.:

   xterm -e screen /dev/pts/28

You will then see the EC prompt and you can type commands, e.g. type ‘help’:

  Please press the <Tab> button to see all available commands.
  You can also use the <Tab> button to prompt or auto-complete all commands or its subcommands.
  You can try to call commands with <-h> or <--help> parameter for more information.

  Available commands:
    cbi        :Print or change Cros Board Info from flash
    chan       :Save, restore, get or set console channel mask
    crash      :Crash the system (for testing)
    feat       :Print feature flags
    gettime    :Print current time
    gpioget    :Read GPIO value(s)
    gpioset    :Set a GPIO
    help       :Prints the help message.
    hibernate  :Hibernate the EC
    kernel     :Kernel commands
    log        :Commands for controlling logger
    md         :dump memory values, optionally specifying the format
    panicinfo  :Print info from a previous panic
    reboot     :Reboot the EC
    rw         :Read or write a word in memory optionally specifying the size
    shmem      :Print shared memory stats
    sysinfo    :Print system info
    syslock    :Lock the system, even if WP is disabled
    timerinfo  :Print timer info
    version    :Print versions
    waitms     :Busy-wait for msec (large delays will reset)

Use Ctrl-C to quit (from the main terminal) as normal.

You can run zephyr under gdb just like any other program.

If you want to share the same terminal, add this line to zephyr/program/minimal/prj.conf and rebuild:

  CONFIG_NATIVE_UART_0_ON_STDINOUT=y

Running that will show an EC prompt on your terminal. Use Ctrl-\ to quit.

Gitlab integration

As an experiment we have a basic gitlab integration. It watches the EC repo and kicks of a build when new commits appear. So far it just builds for volteer and does not run any tests. For firmware branches, it also builds, but fails.

The gitlab builder works without a chroot and uses the Zephyr toolchain. This is intended to ensure that we have a path to upstreaming our code eventually and do not rely on Chrome OS-specific tools. It does make use of ‘zmake’, however.

See the piplines here.

CQ builder

To test the cq builder script run these commands:

firmware-zephyr-cq

rm -rf /tmp/artifact_bundles /tmp/artifact_bundle_metadata \
 ~/chromiumos/src/platform/ec/build
( cd ~/chromiumos/src/platform/ec/zephyr ; \
./firmware_builder.py --metrics /tmp/metrics-build build && \
./firmware_builder.py --metrics /tmp/metrics-test test && \
./firmware_builder.py --metrics /tmp/metrics-bundle bundle && \
echo PASSED )
cat /tmp/artifact_bundle_metadata
cat /tmp/metrics-build
ls -l /tmp/artifact_bundles/

firmware-zephyr-cov-cq

rm -rf /tmp/artifact_bundles-cov /tmp/artifact_bundle_metadata-cov \
  ~/chromiumos/src/platform/ec/build && \
cd ~/chromiumos/src/platform/ec/zephyr && \
./firmware_builder.py --metrics /tmp/metrics --code-coverage build && \
./firmware_builder.py --metrics /tmp/metrics --code-coverage test && \
./firmware_builder.py --metrics /tmp/metrics --code-coverage \
  --output-dir=/tmp/artifact_bundles-cov \
  --metadata=/tmp/artifact_bundle_metadata-cov bundle && \
echo PASSED
cat /tmp/artifact_bundle_metadata-cov
ls -l /tmp/artifact_bundles-cov

Zmake unit tests

Run the tests with zephyr/zmake/run_tests.sh. You can generate a coverage report, but not in the chroot, as some pip modules are missing there.

The latest coverage report is on gitlab.

You can run the coverage report outside of the chroot easily:

# Install test dependencies
cd ~/chromiumos/src/platform/ec
python3 -m pip install 'zephyr/zmake[tests]' --user
# Run tests with coverage
cd ~/chromiumos/src/platform/ec/zephyr/zmake
coverage run --source=zmake -m pytest .
coverage report
coverage html
xdg-open htmlcov/index.html