Rafine SoruMTD Silme Blok Boyutu
nasıl okumak ve silme blok boyutu sıfır olan bir MTD SRAM cihazından metin bilgileri yazıyorsunuz?
Notlar: Ben libmtd
sıfır
- boyutu da başarısız tek çöp ürettiler
- girişimleri (aşağıya bakınız)
mtdblock
için
echo >
ve
cat
kullanımı
Orijinal Linux çalıştıran bir ARM işlemcisine bağlı bir SRAM çipini okumaya ve yazmaya çalışıyorum. SRAM ile bir dosya, seri aygıt veya bellek bölümü gibi arayüz oluşturmama umurumda değil. SRAM çipi için mevcut cihaz sürücüsü cihazı bir MTD olarak kaydeder. Ben /proc/mtd
denetleyerek bu doğrulanmadı:
~# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00000000 "spi1.0"
Ben MTD utils'i kullanarak MTD biçimlendirmek için bir öğretici buldum. Bu cihazın bakarken tüm kullanıcı uzay MTD/UBI/JFF2 araçları kazasında çünkü yaşıyorum sorun, ben SRAM/MTD cihazla arayüzü olamaz IE geçerli:
~# mtdinfo
Count of MTD devices: 1
Floating point exception (core dumped)
Bu istisna meydana görünüyor çünkü tüm MTD yardımcı programları libmtd kullanıyor. Libmtd'deki mtd_get_dev_info1
işlevi, silme bloğu boyutuyla böler ve benim durumumda silme bloğu boyutu sıfırdır.
mtd->eb_cnt = mtd->size/mtd->eb_size;
bu çip MTD sürücüsü sahip olsa da, ben yazma döngüleri bir endişe olduğunu sanmıyorum ve silme blok sıfır olmasının nedeni de bu.
- i programları doğru çalışması için çipini bir silme blok boyutunu vermek için sürücüyü değiştirmek olmalı: bu yüzden sorularım şunlardır? Eğer öyleyse ne büyüklük?
- Sıfır silme bloğu boyutunu yok saymak için
libmtd
'u değiştirmeliyim? Eğer öyleyse neeb_cnt
ayarlamalıyım? - MTD cihazına veri okumak ve yazmak için daha iyi bir yol var mı?
Ek Notlar:
- Stabilite Bir
echo test > /dev/mtdblock0
vecat /dev/mtdblock0
yapmaya çalıştım ve çöp
Güncelleme 10 başka birşey
~# mtdinfo
Count of MTD devices: 1
Present MTD devices: mtd0
Sysfs interface supported: yes
ubiformat başarısız oluyor Ancak:
~# 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)
Güncelleme # Maalesef
ubiformat çalıştırdıktan sonra çökmesine neden çekirdek (aslında 0x4000) 4000 silme blok boyutunun ayarlanması 2 10/20~# 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
Güncelleştirme 10/23 Ben fdisk ile normalde sürücüyü biçimlendirmek, ancak silindir olmaması ile ilgili elde hatalar gibi görünüyor çalıştı:
veri/dev/mtdblock0
okunan yazılı ve edilecek kez izin sabit altta yatan donanım sorun oluştu :~# 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)
(uzman modunu kullanarak etrafında almak mümkün olabilir) mantıksal olarak gerçek silme boyutu "geçerli değildir" belleğin adreslenebilir genişliği olurdu - çoğu mimaride 1 bayt. Ancak, SLRAM sürücüsü, muhtemelen bir MMU sayfalarını izleyen 4k olan blok boyutunu kullanır gibi görünüyor. –
Silme bloğu boyutunu 4K olarak ayarlamak ve ne olacağını bildirmek için sürücüyü değiştireceğim. –
+1 için @ChrisStratton fikri, bu 4K sesleri makul bir şekilde yazmak üzereydi, ancak neden bu tür bir ara yüzün kullanıldığını bilmiyorum. – 0andriy