Refined Câu hỏiMTD Erase Khối Kích thước của zero cho SRAM
Làm thế nào để đọc và ghi thông tin văn bản từ một thiết bị SRAM MTD với khối erase kích thước không?
Ghi chú:
- Tôi đang sử dụng trình điều khiển 23K256
- Nỗ lực để sử dụng công cụ MTD-util đã thất bại vì
libmtd
không thể xử lý một kích thước khối erase của zero - nỗ lực để thêm nhân tạo một khối erase kích thước cũng không thành công (xem bên dưới)
- Cố gắng sử dụng
echo >
vàcat
đếnmtdblock
chỉ sản xuất rác thải
gốc Tôi đang cố gắng để đọc và ghi vào một chip SRAM kết nối với một bộ xử lý ARM chạy Linux. Tôi không quan tâm nếu tôi giao diện với SRAM như một tập tin, thiết bị nối tiếp hoặc phân vùng bộ nhớ. Trình điều khiển thiết bị hiện tại cho chip SRAM đăng ký thiết bị dưới dạng MTD. Tôi xác nhận điều này bằng cách kiểm tra /proc/mtd
:
~# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00000000 "spi1.0"
Tôi tìm thấy một hướng dẫn để định dạng MTD sử dụng MTD utils. Vấn đề tôi đang gặp là tôi không thể giao tiếp với các thiết bị/MTD SRAM vì tất cả các MTD sử dụng không gian/UBI/công cụ JFF2 sụp đổ khi nhìn vào thiết bị này, IE:
~# mtdinfo
Count of MTD devices: 1
Floating point exception (core dumped)
ngoại lệ này dường như xảy ra vì tất cả các tiện ích MTD đều sử dụng libmtd. Hàm mtd_get_dev_info1
trong libmtd chia cho kích thước khối xóa và trong trường hợp của tôi, kích thước khối xóa là bằng không.
mtd->eb_cnt = mtd->size/mtd->eb_size;
Mặc dù chip này có trình điều khiển MTD, tôi không nghĩ rằng chu trình ghi là một mối quan tâm và đó là lý do khối xóa là zero. vì vậy câu hỏi của tôi là như sau:
- Tôi có nên sửa đổi trình điều khiển để cung cấp cho chip kích thước khối xóa để tiện ích hoạt động chính xác không? Nếu vậy kích cỡ nào?
- Tôi có nên sửa đổi
libmtd
để bỏ qua kích thước khối xóa không? Nếu vậy tôi nên đặt sốeb_cnt
thành gì? - Có cách nào tốt hơn để đọc và ghi dữ liệu vào thiết bị MTD không?
Ghi chú thêm:
- ổn định là quan trọng hơn hiệu suất tối ưu trong hoàn cảnh của tôi
- Tôi cố gắng để làm một
echo test > /dev/mtdblock0
vàcat /dev/mtdblock0
và có gì nhưng rác
Cập nhật 10/20 Thay đổi kích thước khối xóa thành 1 trong trình điều khiển (Tôi muốn thay đổi thành 4000 , nhưng tôi không chắc chắn về các đơn vị). MTD Utils không còn ném ngoại lệ được đưa ra trước đây nữa.
~# mtdinfo
Count of MTD devices: 1
Present MTD devices: mtd0
Sysfs interface supported: yes
Tuy nhiên ubiformat không thất bại:
~# ubiformat /dev/mtd0
ubiformat: mtd0 (ram), size 131072 bytes (128.0 KiB), 131072 eraseblocks of
1 bytes, min. I/O size 1 bytes
libscan: scanning eraseblock 0 -- 0 % complete libmtd: error!: bad offset
0 or length 64, mtd0 eraseblock size is 1
ubiformat: error!: failed to scan mtd0 (/dev/mtd0)
Update # 2 10/20 Đáng tiếc là thiết lập kích thước khối erase đến 4000 (trên thực tế 0x4000) gây ra hạt nhân sụp đổ sau khi chạy ubiformat
~# ubiformat /dev/mtd0
ubiformat: mtd0 (ram), size 131072 bytes (128.0 KiB), 8 eraseblocks of 16384
bytes (16.0 KiB), min. I/O size 1 bytes
libscan: scanning erasebUnable to handle kernel NULL pointer dereference at
virtual address 00000000
libscanpgd = 8cc6c000te
libscan: scanning eras[00000000] *pgd=8cbbb835, *pte=00000000, *ppte=00000000
libscan: scanning eInternal error: Oops: 80000007 [#1] PREEMPT SMP ARM
Cập nhật 10/23.210 Tôi cố gắng để định dạng ổ đĩa bình thường với fdisk, nhưng dường như nhận được các lỗi liên quan đến việc thiếu xi lanh:
:~# fdisk /dev/mtdblock0
...
Command (m for help): p
Disk /dev/mtdblock0: 0 MB, 131072 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Command (m for help): n
Unknown value(s) for: cylinders (settable in the extra functions menu)
Trừ khi bạn đang hy vọng cho một sự thừa nhận đặc biệt từ 0 là "không áp dụng" một cách logic kích thước thực tế erase sẽ là chiều rộng địa chỉ của bộ nhớ - trên hầu hết các kiến trúc 1 byte. Tuy nhiên, trình điều khiển SLRAM dường như sử dụng kích thước khối của nó là 4k, có thể là sau từ một trang MMU. –
Tôi sẽ sửa đổi trình điều khiển để đặt kích thước khối xóa thành 4K và báo cáo lại những gì sẽ xảy ra. –
+1 với ý tưởng @ChrisStratton, sắp viết 4K âm thanh hợp lý, mặc dù tôi không chắc chắn tại sao nó lại sử dụng loại giao diện đó ngay từ đầu. – 0andriy