tree: b147e193d1b2de8ec6a73047fd0b9b589bce356e
  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.cbi
  37. Kconfig.cec
  38. Kconfig.charger
  39. Kconfig.chargesplash
  40. Kconfig.cme
  41. Kconfig.console
  42. Kconfig.console_cmd_mem
  43. Kconfig.debug_assert
  44. Kconfig.defaults
  45. Kconfig.defaults-arm
  46. Kconfig.detachable_base
  47. Kconfig.espi
  48. Kconfig.fingerprint
  49. Kconfig.flash
  50. Kconfig.header
  51. Kconfig.host_interface
  52. Kconfig.i2c
  53. Kconfig.init_priority
  54. Kconfig.ioex
  55. Kconfig.keyboard
  56. Kconfig.led
  57. Kconfig.led_dt
  58. Kconfig.mkbp_event
  59. Kconfig.motionsense
  60. Kconfig.panic
  61. Kconfig.pd
  62. Kconfig.pd_console_cmd
  63. Kconfig.pd_discharge
  64. Kconfig.pd_frs
  65. Kconfig.pd_host_cmd
  66. Kconfig.pd_int_shared
  67. Kconfig.pd_meas_vbus
  68. Kconfig.pd_usbc_device_type
  69. Kconfig.pd_vbus_detection
  70. Kconfig.pmic
  71. Kconfig.poe
  72. Kconfig.port80
  73. Kconfig.powerseq
  74. Kconfig.ppc
  75. Kconfig.random
  76. Kconfig.retimer
  77. Kconfig.rollback
  78. Kconfig.rsa
  79. Kconfig.rtc
  80. Kconfig.sensor_devices
  81. Kconfig.stacks
  82. Kconfig.svdm_rsp
  83. Kconfig.system
  84. Kconfig.tabletmode
  85. Kconfig.tasks
  86. Kconfig.tcpm
  87. Kconfig.temperature
  88. Kconfig.test
  89. Kconfig.throttle_ap
  90. Kconfig.timer
  91. Kconfig.touchpad
  92. Kconfig.usb_charger
  93. Kconfig.usb_i2c
  94. Kconfig.usb_mux
  95. Kconfig.usb_update
  96. Kconfig.usba
  97. Kconfig.usbc
  98. Kconfig.usbc_common_altmode
  99. Kconfig.usbc_ss_mux
  100. Kconfig.watchdog
  101. Kconfig.wireless_charger
  102. Makefile.cq
  103. malloc.cmake
  104. module.yml
  105. pigweed-vpython3
  106. README.md
  107. 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