.. SPDX-License-Identifier: GPL-2.0+: .. index:: single: cedit (command) cedit command ============= Synopsis -------- :: cedit load cedit run cedit write_fdt cedit read_fdt cedit write_env [-v] cedit read_env [-v] cedit write_cmos [-v] [dev] cedit cb_load Description ----------- The *cedit* command is used to load a configuration-editor description and allow the user to interact with it. It makes use of the expo subsystem. The description is in the form of a devicetree file, as documented at :ref:`expo_format`. See :doc:`../../develop/cedit` for information about the configuration editor. cedit load ~~~~~~~~~~ Loads a configuration-editor description from a file. It creates a new cedit structure ready for use. Initially no settings are read, so default values are used for each object. cedit run ~~~~~~~~~ Runs the default configuration-editor event loop. This is very simple, just accepting character input and moving through the objects under user control. The implementation is at `cedit_run()`. cedit write_fdt ~~~~~~~~~~~~~~~ Writes the current user settings to a devicetree file. For each menu item the selected ID and its text string are written. cedit read_fdt ~~~~~~~~~~~~~~ Reads the user settings from a devicetree file and updates the cedit with those settings. cedit read_env ~~~~~~~~~~~~~~ Reads the settings from the environment variables. For each menu item ``, cedit looks for a variable called `c.` with the ID of the selected menu item. The `-v` flag enables verbose mode, where each variable is printed after it is read. cedit write_env ~~~~~~~~~~~~~~~ Writes the settings to environment variables. For each menu item the selected ID and its text string are written, similar to: setenv c. setenv c.-str The `-v` flag enables verbose mode, where each variable is printed before it is set. cedit write_cmos ~~~~~~~~~~~~~~~~ Writes the settings to locations in the CMOS RAM. The locations used are specified by the schema. See `expo_format_`. The `-v` flag enables verbose mode, which shows which CMOS locations were updated. Normally the first RTC device is used to hold the data. You can specify a different device by name using the `dev` parameter. .. _cedit_cb_load: cedit cb_load ~~~~~~~~~~~~~ This is supported only on x86 devices booted from coreboot. It creates a new configuration editor which can be used to edit CMOS settings. Example ------- :: => cedit load hostfs - fred.dtb => cedit run => cedit write_fdt hostfs - settings.dtb That results in:: / { cedit-values { cpu-speed = <0x00000006>; cpu-speed-value = <0x00000003>; cpu-speed-str = "2 GHz"; power-loss = <0x0000000a>; power-loss-value = <0x00000000>; power-loss-str = "Always Off"; }; } => cedit read_fdt hostfs - settings.dtb This shows settings being stored in the environment:: => cedit write_env -v c.cpu-speed=11 c.cpu-speed-str=2.5 GHz c.cpu-speed-value=3 c.power-loss=14 c.power-loss-str=Always Off c.power-loss-value=0 c.machine-name=my-machine c.cpu-speed=11 c.power-loss=14 c.machine-name=my-machine => print ... c.cpu-speed=6 c.cpu-speed-str=2 GHz c.power-loss=10 c.power-loss-str=Always Off c.machine-name=my-machine ... => cedit read_env -v c.cpu-speed=7 c.power-loss=12 This shows writing to CMOS RAM. Notice that the bytes at 80 and 84 change:: => rtc read 80 8 00000080: 00 00 00 00 00 2f 2a 08 ...../*. => cedit write_cmos -v Write 2 bytes from offset 80 to 84 => rtc read 80 8 00000080: 01 00 00 00 08 2f 2a 08 ...../*. => cedit read_cmos -v Read 2 bytes from offset 80 to 84 Here is an example with the device specified:: => cedit write_cmos rtc@43 => This example shows editing coreboot CMOS-RAM settings. A script could be used to automate this:: => cbsysinfo Coreboot table at 500, size 5c4, records 1d (dec 29), decoded to 000000007dce3f40, forwarded to 000000007ff9a000 CPU KHz : 0 Serial I/O port: 00000000 base : 00000000 pointer : 000000007ff9a370 type : 1 base : 000003f8 baud : 0d115200 regwidth : 1 input_hz : 0d1843200 PCI addr : 00000010 Mem ranges : 7 id: type || base || size 0: 10:table 0000000000000000 0000000000001000 1: 01:ram 0000000000001000 000000000009f000 2: 02:reserved 00000000000a0000 0000000000060000 3: 01:ram 0000000000100000 000000007fe6d000 4: 10:table 000000007ff6d000 0000000000093000 5: 02:reserved 00000000fec00000 0000000000001000 6: 02:reserved 00000000ff800000 0000000000800000 option_table: 000000007ff9a018 Bit Len Cfg ID Name 0 180 r 0 reserved_memory 180 1 e 4 boot_option 0:Fallback 1:Normal 184 4 h 0 reboot_counter 190 8 r 0 reserved_century 1b8 8 r 0 reserved_ibm_ps2_century 1c0 1 e 1 power_on_after_fail 0:Disable 1:Enable 1c4 4 e 6 debug_level 5:Notice 6:Info 7:Debug 8:Spew 1d0 80 r 0 vbnv 3f0 10 h 0 check_sum CMOS start : 1c0 CMOS end : 1cf CMOS csum loc: 3f0 VBNV start : ffffffff VBNV size : ffffffff ... Unimpl. : 10 37 40 Check that the CMOS RAM checksum is correct, then create a configuration editor and load the settings from CMOS RAM:: => cbcmos check => cedit cb => cedit read_cmos Now run the cedit. In this case the user selected 'save' so `cedit run` returns success:: => if cedit run; then cedit write_cmos -v; fi Write 2 bytes from offset 30 to 38 => echo $? 0 Update the checksum in CMOS RAM:: => cbcmos check Checksum 6100 error: calculated 7100 => cbcmos update Checksum 7100 written => cbcmos check =>