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