Evet, U-çizme RAM ortam değişkenleri bellek bloğunu kopyalar.
blok gelen kalıcı depolama platformu özeldir. (Bu depolama kullanımı seçeneğini ve kaynak dosyası) Bazı ortak depolama seçenekleri: içinde
NOR flash common/env_flash.c
SPI flash common/env_sf.c
MMC common/env_mmc.c
CONFIG_ tanımları/yapılandırmaları içerir/yourboard.h ayrıntıları belirleyecek. Örneğin, SPI flaş belki, belleğin en üstünde eşlenen:
#define CONFIG_ENV_IS_IN_SPI_FLASH
#define CONFIG_ENV_SIZE 0x00001000
#define CONFIG_ENV_ADDR 0xFFFFF000
CONFIG_ENV_ADDR Flash u-boot ortamı Değişken bölümün adresidir. Kalıcı belleğe çevreyi yazarken u-boot otomatik olarak bu bölüme CRC32 oluşturur
Not. Başlangıçta ortam okunurken CRC kontrol edilir. CRC kontrolü geçmezse, depolanan ortam kullanılmaz; bunun yerine program koduna kodlanmış yeni bir varsayılan ortam kullanılır, bu özel bir durumdur.
U-Boot başlatma sırasında
, çevre değişkenleri karma tablo alınır. İşletim sırasında, tüm okuma/yazma işlemleri ve tüm "printenv" (ekran ortam değişkeni) ve "setenv" (ortam değişkeni ayarlandı) komutları bu tablo girişlerini kullanır. Kalıcı depoya yazan "saveenv" komutu tamamlanana kadar herhangi bir değişiklik kaydedilmemiş.
Daha fazla bilgi için, bkz. u-boot/common/cmd_nvedit.c hatları 14-24 ve u-boot/README satırları 3474-3881 (satır numaraları v2013.10 içindir).
@ Joe Kul, Teşekkürler. U-boot, ortam değişkenlerinin belleğinin bloğunu RAM'e kopyalar. Sonra bu bölümün adresini RAM'de tanımladığımız yer? U-boot neden env bölümünü doğrudan flash bellekten ** hash tablosuna ** yazmıyor ve içeri aktarmıyor, fakat daha sonra RAM'e kopyalamanız gerekiyor mu? –
U-Boot, flaştan RAM'e kadar neredeyse her şeyi kopyalar. Buna "yer değiştirme" denir.Flaştan gelen herhangi bir şey için adresi RAM'de almak için, u-boot.map içindeki flaş yerine "Yer Değiştirme Ofseti" ni (konsolda basılır) ekleyebilirsiniz. Ayrıca bkz. Arch/arm/lib/board.c. Ancak yer değiştirme ayrı bir konudur. –
@ Joe Kul: U-boot'un bir "yeniden yerleştirme" ye ihtiyacı olduğunu bilmiyorum. Sistemim için, boostrap RAM'a u-boot yükler, bu yüzden u-boot'in sadece ortam değişkenleri bloklarını okumalı fakat yeniden yerleştirmeye gerek olmadığını düşünüyorum. Aslında, önyüklemem ikili bir görüntüdür, bu nedenle herhangi bir yer değiştirme gerçekleştiremez. Teşekkür –