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

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_UART_NATIVE_PTY_0_ON_STDINOUT=y

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

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 --metadata /tmp/artifact_bundle_metadata 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.

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