Đợt này dự án của mình có việc cần phải đọc ghi file ở driver, cũng gặp khá nhiều lỗi nên muốn chia sẻ với mọi người.
Kernel có cung cấp 1 số hàm riêng để driver có thể thao tác được với file ví dụ như kernel_read() và kernel_write(). Hầu hết mọi người sẽ thấy mọi người trả lời 2 hàm này trong các topic hỏi đáp về vấn đề đọc ghi file dưới kernel.
Tuy nhiên nếu xét theo tiêu chí coding tốt thì không nên sử dụng. Có 1 số lỗi tiềm ẩn có thể kế đến. Đầu tiên trong quá trình OS booting, các driver thường được load trước khi hệ thống file system được khởi tạo. Nếu driver thao tác với file trước khi file system khởi tạo thành công thì sẽ bị lỗi. Điểm thứ 2 là dưới kernel không làm việc với file name, thay vào đó nó quản lý file thông qua inode. Dẫn đến việc mở file với đường dẫn cũng khá rủi ro. Ví dụ như hàm filp_open() nếu mở 1 file không thành công thì con trỏ file trả về cũng khác NULL???. Điểm thứ 3 là việc thao tác với file sẽ gây sleep tiến trình gọi nó, dẫn đến thao tác với file tại critical section cũng sẽ gây lỗi.
Trong dự án của mình, khi mình request đọc ghi file dưới kernel với tốc độ cao, hệ thống lập tức crash. Đọc ghi với tốc độ chậm thì không sao.
Solution mình đánh giá án toàn nhất nếu như phải đọc ghi file dưới kernel đó là share memory với application. Data cần ghi ra file sẽ được ghi vào shared memory, sau đó driver trigger cho application ghi xuống file. Phương án này có lẽ là an toàn nhất.
