/ firmware / src / services / system_files.rs
system_files.rs
 1  use alloc::string::String as AllocString;
 2  use core::fmt::Write;
 3  
 4  use crate::{
 5      config::{app, board},
 6      filesystems::sd,
 7      services::{identity, system},
 8  };
 9  
10  pub fn initialize_layout() {
11      let _ = sd::create_directory("ETC");
12      let _ = sd::create_directory("BOOT");
13      let _ = sd::create_directory("TMP");
14  
15      identity::ensure_home_hierarchy();
16      generate_rc_conf();
17      generate_loader_conf();
18  }
19  
20  pub fn generate_rc_conf() {
21      let mut rc = AllocString::new();
22      let _ = write!(rc, "# /etc/rc.conf -- generated by Microvisor\r\n");
23      let _ = write!(
24          rc,
25          "# Do not edit. Configuration is compiled into firmware.\r\n\r\n"
26      );
27      let _ = write!(rc, "hostname=\"{}\"\r\n", app::HOSTNAME);
28      let _ = write!(rc, "sshd_enable=\"YES\"\r\n");
29      let _ = write!(rc, "sshd_port=\"{}\"\r\n", app::ssh::PORT);
30      let _ = write!(rc, "sntpd_enable=\"YES\"\r\n");
31      let _ = write!(rc, "sntpd_server=\"{}\"\r\n", app::NTP_SERVER);
32      let _ = write!(rc, "httpd_enable=\"YES\"\r\n");
33      let _ = write!(rc, "httpd_port=\"{}\"\r\n", app::http::PORT);
34      let _ = write!(rc, "otad_enable=\"YES\"\r\n");
35      let _ = write!(rc, "otad_port=\"{}\"\r\n", app::ota::PORT);
36      let _ = write!(rc, "wifi_ap_ssid=\"{}\"\r\n", app::wifi::ap::SSID);
37      let _ = write!(rc, "wifi_ap_auth=\"{}\"\r\n", app::wifi::ap::AUTH_MODE);
38      let _ = write!(rc, "timezone=\"{}\"\r\n", app::time::ZONE);
39      let _ = sd::write_file_at("/etc", "RC.CONF", rc.as_bytes());
40  }
41  
42  pub fn generate_loader_conf() {
43      let mut loader = AllocString::new();
44      let _ = write!(loader, "# /boot/loader.conf -- generated by Microvisor\r\n");
45      let _ = write!(
46          loader,
47          "# Do not edit. Hardware config is compiled into firmware.\r\n\r\n"
48      );
49      let _ = write!(loader, "fatfs_load=\"YES\"\r\n");
50      let _ = write!(loader, "sd_spi_bus=\"{}\"\r\n", app::sd_card::DEVICE);
51      let _ = write!(
52          loader,
53          "i2c_frequency=\"{}\"\r\n",
54          board::i2c::FREQUENCY_KHZ
55      );
56      let _ = write!(
57          loader,
58          "sensor_power_gpio=\"{}\"\r\n",
59          board::i2c::LEGACY_POWER_GPIO
60      );
61      let snapshot = system::snapshot();
62      let _ = write!(loader, "heap_size=\"{}\"\r\n", snapshot.heap_total);
63      let _ = sd::write_file_at("/boot", "LOADER.CO", loader.as_bytes());
64  }