@@ -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 , "firmware" ),
22+ createdDirs : []string {},
2123 }
2224}
2325
@@ -30,13 +32,27 @@ func (fs *FileSystemManager) BootstrapDirectories() error {
3032 fs .createdDirs = append (fs .createdDirs , createdInstancePath )
3133 }
3234
33- createdFirmwarePath , err := mkdirAll (fs .firmwareDir , 0755 )
35+ createdFirmwareDirSpecPath , 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 createdFirmwareDirSpecPath != "" {
41+ fs .createdDirs = append (fs .createdDirs , createdFirmwareDirSpecPath )
42+ }
43+
44+ if err := os .WriteFile (fs .firmwareDirPathFile , []byte (fs .firmwareDir ), 0644 ); err != nil {
45+ fs .Cleanup ()
46+ return fmt .Errorf ("failed to write firmware path file: %w" , err )
47+ }
48+
49+ createdFirmwareDir , err := mkdirAll (fs .firmwareDir , 0755 )
3450 if err != nil {
3551 fs .Cleanup ()
3652 return fmt .Errorf ("failed to create firmware directory: %w" , err )
3753 }
38- if createdFirmwarePath != "" {
39- fs .createdDirs = append (fs .createdDirs , createdFirmwarePath )
54+ if createdFirmwareDir != "" {
55+ fs .createdDirs = append (fs .createdDirs , createdFirmwareDir )
4056 }
4157
4258 return nil
@@ -75,6 +91,24 @@ func (fs *FileSystemManager) Cleanup() error {
7591 return nil
7692}
7793
94+ func mkfile (path string , perm os.FileMode ) (string , error ) {
95+ dir , err := mkdirAll (filepath .Dir (path ), perm )
96+ if err != nil {
97+ return "" , err
98+ }
99+ file , err := os .OpenFile (path , os .O_CREATE | os .O_RDWR , perm )
100+ if err != nil {
101+ return "" , err
102+ }
103+ defer file .Close ()
104+ if dir == "" {
105+ return path , nil
106+ } else {
107+ return dir , nil
108+ }
109+
110+ }
111+
78112func mkdirAll (path string , perm os.FileMode ) (string , error ) {
79113 current := path
80114 var topmostMissing string
0 commit comments