@@ -7,17 +7,19 @@ import (
77)
88
99type FileSystemManager struct {
10- instanceDir string
11- firmwareDir string
12- createdDirs []string
10+ instanceDir string
11+ firmwareDirPathFile string
12+ firmwareDir string
13+ createdDirs []string
1314}
1415
1516func NewFileSystemManager (rootDir string , index uint ) * FileSystemManager {
1617 instanceName := fmt .Sprintf ("remoteproc%d" , index )
1718 return & FileSystemManager {
18- instanceDir : filepath .Join (rootDir , "sys" , "class" , "remoteproc" , instanceName ),
19- firmwareDir : filepath .Join (rootDir , "lib" , "firmware" ),
20- createdDirs : []string {},
19+ instanceDir : filepath .Join (rootDir , "sys" , "class" , "remoteproc" , instanceName ),
20+ firmwareDirPathFile : filepath .Join (rootDir , "sys" , "module" , "firmware_class" , "parameters" , "path" ),
21+ firmwareDir : filepath .Join (rootDir , "userhome" , "firmware" ),
22+ createdDirs : []string {},
2123 }
2224}
2325
@@ -30,13 +32,24 @@ func (fs *FileSystemManager) BootstrapDirectories() error {
3032 fs .createdDirs = append (fs .createdDirs , createdInstancePath )
3133 }
3234
33- createdFirmwarePath , err := mkdirAll (fs .firmwareDir , 0755 )
35+ createdFirmwareDirPathFileFolder , err := mkfile (fs .firmwareDirPathFile , 0755 )
36+ if err != nil {
37+ fs .Cleanup ()
38+ return fmt .Errorf ("failed to create firmware path directory: %w" , err )
39+ }
40+ if createdFirmwareDirPathFileFolder != "" {
41+ fs .createdDirs = append (fs .createdDirs , createdFirmwareDirPathFileFolder )
42+ }
43+ // Write Firmware path
44+ os .WriteFile (fs .firmwareDirPathFile , []byte (fs .firmwareDir ), 0644 )
45+
46+ createdFirmwareDir , err := mkdirAll (fs .firmwareDir , 0755 )
3447 if err != nil {
3548 fs .Cleanup ()
3649 return fmt .Errorf ("failed to create firmware directory: %w" , err )
3750 }
38- if createdFirmwarePath != "" {
39- fs .createdDirs = append (fs .createdDirs , createdFirmwarePath )
51+ if createdFirmwareDir != "" {
52+ fs .createdDirs = append (fs .createdDirs , createdFirmwareDir )
4053 }
4154
4255 return nil
@@ -52,6 +65,13 @@ func (fs *FileSystemManager) WriteInstanceFile(filename, content string) error {
5265}
5366
5467func (fs * FileSystemManager ) FirmwareExists (firmwareName string ) bool {
68+ firmwareDir , _ := os .ReadFile (fs .firmwareDirPathFile ) // simulate reading the firmware path
69+ firmwareDirStr := string (firmwareDir )
70+ if firmwareDirStr != fs .firmwareDir {
71+ fmt .Printf ("firmware path mismatch: expected %s from /sys/module/firmware_class/parameters/path, got %s\n " , fs .firmwareDir , firmwareDirStr )
72+ return false
73+ }
74+
5575 path := filepath .Join (fs .firmwareDir , firmwareName )
5676 _ , err := os .Stat (path )
5777 return ! os .IsNotExist (err )
@@ -75,6 +95,19 @@ func (fs *FileSystemManager) Cleanup() error {
7595 return nil
7696}
7797
98+ func mkfile (path string , perm os.FileMode ) (string , error ) {
99+ folder , err := mkdirAll (filepath .Dir (path ), perm )
100+ if err != nil {
101+ return "" , err
102+ }
103+ file , err := os .OpenFile (path , os .O_CREATE | os .O_RDWR , perm )
104+ if err != nil {
105+ return "" , err
106+ }
107+ defer file .Close ()
108+ return folder , nil
109+ }
110+
78111func mkdirAll (path string , perm os.FileMode ) (string , error ) {
79112 current := path
80113 var topmostMissing string
0 commit comments