TI DM6446 EVM

1 Geliştirme araçlarının hazırlanması:

İlk olarak geliştirme araçları indirilip açıldıktan sonra .../bin dizini altındaki derleme araçlarının arm-linux önekine (prefix) sahip sembolik linkleri oluşturulup (görece daha uzun olan arm-none-linux-gnueabi öneki ile uğraşmamak için), dizin yolu PATH değişkenine eklenmiş ve bir çevresel değişkende saklanmıştır.

wget -c http://www.codesourcery.com/sgpp/lite/arm/portal/package6488/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
tar jxvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
cd arm-2010q1/bin/
for i in `ls`; do s=`echo $i | cut -b 24-`; ln -s $i arm-linux-$s; done
export PATH=$(pwd):$PATH
export DEVELOPMENT_TOOLS=$(pwd)

2 u-boot önyükleyicinin (bootloader) derlenmesi:

DM644x EVM, ubl(User Boot Loader) ve u-boot olmak üzere iki adet önyükleyiciye ihtiyaç duymaktadır. Göreli olarak daha küçük olan ubl, çekirdeği yükleyecek olan u-boot önyükleyicisini başlatmaktan sorumludur. u-boot’un derlenme aşamaları temel olarak aşağıdaki gibidir. u-boot, arm-linux-gcc’yi ARM için öngörülen derleyici olarak kullandığından, çapraz derleme için çekirdeğin aksine CROSS COMPILE veya ARCH çevresel değişkenlerine ihtiyaç duymamaktadır.

git clone git://www.denx.de/git/u-boot.git u-boot
make distclean
make davinci_dvevm_config
make

u-boot kaynak kodu içerisinde include/configs/davinci_dvevm.h yolu izlenerek önyükleyicinin konfigür ayarları yapılabilir. u-boot öngörülen olarak NOR flash için derlendiğinden bu haliyle NAND üzerinde çalışmamaktadır, ayrıca önyükleyicinin autoboot özelliğinin çalışması için bir bootdelay değeri girilmelidir. Bunun için aşağıdaki değişiklikler yapılmalıdır.

-#define CONFIG_SYS_USE_NOR
+#define CONFIG_SYS_USE_NAND

-#undef CONFIG_BOOTDELAY
#define CONFIG_BOOTDELAY    5

Ayrıca bootcmd, bootargs gibi çevresel değişkenlerin değerleri hard coded olarak buradan ayarlanabilir.

u-boot temel olarak yukarıdaki gibi derlenmesine karşın birkaç problemle karşılaşılabilir. u-boot derleme işlemi konak makinanın doğal C derleyici ile başlayan bir süreçtir ve konak makinaya bağımlılığı vardır. Konak bilgisayardaki /usr/local/include altındaki bazı başlık dosyalarının varlığı derleme işleminde sorunlara yol açabilmektedir(u-boot, sistemde var olan başlık dosyaları ile ilgili konfigürasyon sonucunda yanlış bir varsayımda bulunuyor olabilir.). Konfigür işleminden önce konak bilgisayarda geçici olarak /usr/local/include dizinin adını değiştirmek sorunu çözebilir.

mv /usr/local/include /usr/local/_include

3 Çekirdeğin derlenmesi:

En son DaVinci linux çekirdeği asağıdaki yol izlenerek derlenmiştir.

git clone git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci.git linux-davinci-2.6
cd linux-davinci-2.6
make ARCH=arm davinci_all_defconfig
make ARCH=arm menuconfig [1]
make ARCH=arm CROSS_COMPILE=arm-linux- uImage

4 Dosya sisteminin oluşturulması:

Dosya sisteminin oluşturulması için temel olarak busybox, dropbear araçları derlenmiş, dosya sisteminde bulunması gereken asgari dizin, açılış betikleri, aygıt düğümleri oluşturulmuş ve geliştirme araçlarının kullandığı standart C kütüphanesi dosya sistemine eklenmiştir.

busybox aşağıdaki gibi derlenebilir, ROOTFS çevresel değişkenine başka bir değer verilebilir.

export ROOTFS=/tmp/dosyasistemi
mkdir -p ${ROOTFS}
wget -c http://www.busybox.net/downloads/busybox-1.17.1.tar.bz2
tar jxvf busybox-1.17.1.tar.bz2
cd busybox-1.17.1/
make  defconfig
#make  menuconfig [ilave ayarlar yapılması durumda...]
make  CROSS_COMPILE=arm-linux-
make CROSS_COMPILE=arm-linux- CONFIG_PREFIX=${ROOTFS} install

Geliştirme araçlarının içindeki standart C kütüpnanesi dosya sisteminde / altına kopyalanmalıdır.

cp -a ${DEVELOPMENT_TOOLS}/../arm-none-linux-gnueabi/libc/lib ${ROOTFS}

Açılış ve sonrasında ihtiyaç duyulacak olan temel dizinler aşağıdaki gibi oluşturulabilir.

mkdir -p ${ROOTFS}/etc/init.d
mkdir -p ${ROOTFS}/dev
mkdir -p ${ROOTFS}/tmp
mkdir -p ${ROOTFS}/proc
mkdir -p ${ROOTFS}/home/root

busybox içinden çıkan örnek inittab üzerinde değişiklik yapılarak dosya sisteminde kullanılabilir.

cp examples/inittab ${ROOTFS}/etc

inittab dosyasına aşağıdaki satır eklenmeli veya açıklama şeklinde olan benzer satır aynı forma dönüştürülmelidir.

::respawn:/sbin/getty -L ttyS0 115200 vt100

Cihaza şu an yalnız uzaktan bağlanılacağı için(seri port veya ağ üzerinden) "/sbin/getty invocations for selected ttys" altındaki tty4 ve tty5 ile başlayan satırlar açıklama haline getirilebilir aksi halde /dev altında gerekli tty aygıt düğümleri oluşturulmalıdır.

/etc/init.d altında içeriği aşağıdaki gibi olan rcS betiği oluşturulmalı ve gerekli izinleri verilmelidir.

#!/bin/sh
mount -t proc proc /proc
mount -t devpts devpts /dev/pts

rcS için aşağıdaki gibi gerekli izinleri verilebilir.

chmod 755 etc/init.d/rcS

/dev altındaki gerekli aygıt düğümleri ve pts dizini aşağıdaki gibi oluşturulabilir veya düğümler konak bilgisayardan cp komutuna -a anahtarı verilerek kopyalanabilir.

mknod -m 666 ${ROOTFS}/dev/tty c 5 0
mknod -m 666 ${ROOTFS}/dev/console c 5 1
mknod -m 666 ${ROOTFS}/dev/tty1 c 4 1
mknod -m 666 ${ROOTFS}/dev/tty2 c 4 2
mknod -m 666 ${ROOTFS}/dev/tty3 c 4 3
mknod -m 666 ${ROOTFS}/dev/tty4 c 4 4
mknod -m 666 ${ROOTFS}/dev/random c 1 8
mknod -m 666 ${ROOTFS}/dev/urandom c 1 9
mknod -m 666 ${ROOTFS}/dev/ptmx c 5 2
mknod -m 666 ${ROOTFS}/dev/zero c 1 5
mknod -m 666 ${ROOTFS}/dev/null c 1 3
mkdir -p ${ROOTFS}/dev/pts

Cihaz bu noktadan sonra bu dosya sistemi kullanılarak nfs üzerinden açılabilir, cihaza seri port üzerinden login olunabilir. Ağ üzerinden login olmak için küçük bir SSH2 sunucu ve istemci uygulaması olan Dropbear aşağıdaki adımlar izlenerek derlenmiş ve cihaz üzerinde çalıştırılmıştır.

wget -c http://matt.ucc.asn.au/dropbear/releases/dropbear-0.52.tar.gz
tar xf dropbear-0.52.tar.gz
cd dropbear-0.52/
./configure --host=arm-linux --disable-zlib
make PROGRAMS="dropbear dbclient dropbearkey scp" MULTI=1 STATIC=1
cp dropbearmulti ${ROOTFS}/usr/bin

Dropbear uygulamasının cihaz üzerinde çalıştırılması için cihaz üzerinde aşağıdaki adımlar izlenebilir.

cd /usr/bin
ln -s dropbearmulti dropbear
ln -s dropbearmulti dbclient
ln -s dropbearmulti dropbearkey
ln -s dropbearmulti scp
mkdir -p /etc/dropbear
dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key

Cihazda /etc altında kullanıcının id numarası, home dizini ve sisteme login olduğunda çalıştıralacak olan programın belirtildiği passwd dosyası oluşturulmalıdır. root kullanıcısı için passwd dosyasının içeriği aşağıdaki gibi olabilir.

root::0:0:root:/home/root:/bin/sh

/etc/passwd dosyasında kriptolu olarak tutulacak olan, root şifresi passwd komutu ile oluşturulabilir. devpts mount edildikten ve dropbear uygulaması başlatıldıktan sonra cihaza ssh üzerinden uzaktan bağlanılabilir.

mount -t devpts devpts /dev/pts
dropbear

dropbear uygulamasının rcS betiği içerisinden sistemin açılışında başlatılması bu işlemi otomatikleştirecektir.

mtd aygıtı ile ilgili düğümler aşağıdaki gibi oluşturulabilir, ardından cihaz nfs üzerinden açılıp dosya sistemi 7. bölümde gösterildiği gibi NAND üzerine yazılabilir.

mknod -m 666 ${ROOTFS}/dev/mtd0 c 90 0
mknod -m 666 ${ROOTFS}/dev/mtd1 c 90 2
mknod -m 666 ${ROOTFS}/dev/mtd2 c 90 4
mknod -m 666 ${ROOTFS}/dev/mtd3 c 90 6
mknod -m 666 ${ROOTFS}/dev/mtdblock0 b 31 0
mknod -m 666 ${ROOTFS}/dev/mtdblock1 b 31 1
mknod -m 666 ${ROOTFS}/dev/mtdblock2 b 31 2
mknod -m 666 ${ROOTFS}/dev/mtdblock3 b 31 3

5 Cihazın açılma yöntemleri:

5.1 FLASH (NOR) üzerindeki önyükleyici ile açılma durumu:

Sistem FLASH üzerinden açılacaksa CS2 SELECT pinlerinden jumper ile FLASH seçilmeli ve işlemci ayarları ile açılış modunun değiştirildiği, kart üzerinde S3 etiketli, kullanıcı anahtarları aşağıdaki konumlara getirilmelidir.

1            ON
2            OFF
3            ON
4            ON
....            (ilgisiz)

Anahtarların hangi durumda ON oldukları anahtar kılıfına bakılarak anlaşılabilir.

Sistem bu şekilde açıldığında FLASH’a önceden yazılmış olan ubl ve u-boot sayesinde, minicom ile cihaza bağlanıldığında u-boot komut satırına düşülebilir. Bundan sonra kernel tftp üzerinden çekilip, u-boot çevresel değişkenleri ile harddisk dosya sistemi veya NFS dosya sistemi seçilerek cihaz açılabilir.

5.2 NAND üzerindeki önyükleyici ile açılma durumu:

Sistem NAND üzerinden açılacaksa CS2 SELECT pinlerinden jumper ile NAND seçilmeli ve kullanıcı anahtarları aşağıdaki konumlara getirilmelidir.

1            OFF
2            OFF
3            OFF
4            OFF
....            (ilgisiz)

Cihazın NAND flashının boş olması durumunda cihaz açılmayacaktır, aynı durum NOR FLASH içinde geçerlidir. Bu örnek için cihazın NAND’ine ubl ve u-boot önyükleyici çiftinin atılması gereklidir. Bunun icin kullanıcı anahtarlarından ilk ikisi ON konumuna alınarak cihaz UART üzerinden boot moduna alınmalıdır. Bu durumda konak bilgisayardan cihaza minicom ile bağlanıldığında ekranda DaVinci yongası içindeki ROM hafızada saklanan, kullanıcının değiştiremeyeci, ROM Boot Loader(RBL) tarafından gönderilen BOOTME mesajı görüntülenecektir. Önyükleyici çifti seri port üzerinden cihaza aşağıdaki gibi yazılabilir.

wget -c http://sourceforge.net/projects/dvflashutils/files/DM644x/v2.00/DM644x_FlashAndBootUtils_2_00.tar.gz/download
tar zxvf DM644x_FlashAndBootUtils_2_00.tar.gz
cd DM644x_FlashAndBootUtils_2_00/DM644x/GNU
./sfh_DM644x.exe -erase -flashType NAND -targetType DM6446 -p /dev/ttyUSB0
./sfh_DM644x.exe -flash  -flashType NAND -targetType DM6446 -p /dev/ttyUSB0 ubl/ubl_DM6446_NAND.bin u-boot.bin [3]

u-boot olarak, deneme kartının üreticisi Spectrum Digital tarafından sağlanan nand flash paketinden çıkan u-boot kullanıldığında(u-boot-567-nand.bin) temel iki sorunla karşılaşılmıştır[2], kaynak koddan derlenen u-boot ile bu sorunlar yaşanmamıştır. ubl olarak seri programlama paketiyle gelen dosya kullanılmalıdır.

Sonrasında ilk iki kullanıcı anahtarı OFF yapılarak cihaz tftp ve nfs üzerinden açılabilir veya çekirdek ve dosya sistemi imajları kalıcı olarak NAND flash üzerine yazılabilir. Örnek açılış senaryoları kısmında gerekli u-boot çevresel değişkenlerinin değerleri verilmiştir.

6 NAND Flash partisyon yapısı:

Kernel tarafından flashın yorumlanma şekli, yani hangi partisyon yapısında görüleceği Linux kaynak kodu içerisinden sabit olarak ayarlanabileceği gibi çekirdeğe önyükleyici tarafından geçirilen argümanlar vasıtasıyla dinamik olarak da yapılabilmektedir. Sabit partisyon için arch/arm/mach-davinci/board-dm644x-evm.c dosyasinda mtd_partition türündeki diziye yeni elemanlar eklenebilir, var olanlar üzerinde değişiklik yapılabilir. Varsayılan partisyon yapısını belirleyen davinci_evm_nandflash_partition isimli dizi aşağıdaki gibidir.

static struct mtd_partition davinci_evm_nandflash_partition[] = {
    /* Bootloader layout depends on whose u-boot is installed, but we
     * can hide all the details.
     *  - block 0 for u-boot environment ... in mainline u-boot
     *  - block 1 for UBL (plus up to four backup copies in blocks 2..5)
     *  - blocks 6...? for u-boot
     *  - blocks 16..23 for u-boot environment ... in TI's u-boot
     */
    {
        .name        = "bootloader",
        .offset        = 0,
        .size        = SZ_256K + SZ_128K,
        .mask_flags    = MTD_WRITEABLE,    /* force read-only */
    },
    /* Kernel */
    {
        .name        = "kernel",
        .offset        = MTDPART_OFS_APPEND,
        .size        = SZ_4M,
        .mask_flags    = 0,
    },
    /* File system (older GIT kernels started this on the 5MB mark) */
    {
        .name        = "filesystem",
        .offset        = MTDPART_OFS_APPEND,
        .size        = MTDPART_SIZ_FULL,
        .mask_flags    = 0,
    }
    /* A few blocks at end hold a flash BBT ... created by TI's CCS
     * using flashwriter_nand.out, but ignored by TI's versions of
     * Linux and u-boot.  We boot faster by using them.
     */
};

Çekirdek command line partition table parsing seçeneği seçilerek derlenmişse, mtdparts komut satırı seçeneği kullanılarak partisyon yapısı dinamik olarak oluşturulabilir. DM644x EVM için kullanımına örnek aşağıdaki gibidir.

setenv bootargs 'console=ttyS0,115200n8  noinitrd  root=/dev/mtdblock2  rw rootfstype=jffs2 mtdparts=davinci_nand.0:512K(Onyukleyici),4M(Cekirdek),40M(Dosya_Sistemi),-(Ek)'

mtd id bilgisine(davinci_nand) çalışan bir sistemde aşağıdaki gibi ulaşılabilir, id’ye eklenen 0 aygıt numarasıdır.

root@dm6446-evm:~# ls /sys/bus/platform/drivers
davinci_emac  dm9000        gen_nand      i2c_davinci
davinci_nand  edma          gpio-keys     serial8250

7 Çekirdek ve Dosya Sisteminin NAND Flash üzerine yazılması:

Çekirdek u-boot önyükleyicisi üzerinden yazılmasına karşın jffs2 dosya sistemi bu şekilde yazıldığında sorunlar yaşandığından dosya sistemi Linux üzerinden yazılmıştır. Çekirdeğin yazılma aşamaları aşağıdadır. Rakamlar başlarına 0x getirilmesede 16'lık tabanda yorumlanmaktadır. u-boot önyükleyicisinde "help nand" şeklinde yardım alınabilir.

nand erase 80000 400000
tftpboot 0x82000000 uImage
nand write 0x82000000 80000 400000

Cihaz nfs üzerinden açıldıktan sonra, ilgili mtdblock aygıt jffs2 türünde mount edilip dosya sistemi arşivi içinde açılabilir. rootfs.tar isimli bir dosya sistemi arşivi nand flash üzerine aşağıdaki gibi yazılabilir.

mkdir -p /mnt/nand
mount -t jffs2 /dev/mtdblock2 /mnt/nand
tar xvf rootfs.tar -C /mnt/nand
sync
umount /mnt/nand

Bir diğer seçenek Linux üzerinde mtd-utils kullanmak olabilir.

8 Örnek açılış senaryoları:

Geliştirme ve son çalışma durumu için uygun olan iki örnek açılma senaryosuna ilişkin önemli u-boot çevresel değişkenleri ve ilgili komutlar aşağıdaki gibidir.

8.1 Cihazın tftp ve nfs dosya sistemi üzerinden açılması:

setenv serverip 172.16.2.68
setenv ipaddr 172.16.2.12
setenv  bootargs 'console=ttyS0,115200n8 noinitrd rw ip=dhcp root=/dev/nfs nfsroot=172.16.2.68:/home/serkan/hawkNFS/davincifs,nolock mem=120M  mtdparts=davinci_nand.0:512K(Onyukleyici),4M(Cekirdek),40M(Dosya_Sistemi),-(Ek)'
tftpboot 0x82000000 uImage
bootm 0x82000000

8.2 Cihazın NAND üzerinden açılması:

setenv bootcmd 'nboot 82000000 0 80000;bootm 0x82000000'
setenv bootargs 'console=ttyS0,115200n8  noinitrd  root=/dev/mtdblock2  rw rootfstype=jffs2 mtdparts=davinci_nand.0:512K(Onyukleyici),4M(Cekirdek),40M(Dosya_Sistemi),-(Ek)'

[1]

mtd ve IDE ilgili bağzı anahtarlar asağıdaki gibi atanmıştır.

CONFIG_MTD=y
CONFIG_MTD_PARTITIONS=y

CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y

CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_DAVINCI=y

[2]

http://c6000.spectrumdigital.com/davincievm/revd/files/nand_flash_package.zip

Linux çekirdeğinin başlarken yaptığı ilk işlemlerden bir tanesi önyükleyici tarafından kendisine geçirilen donanım platformuyla ilgili makina numarasını, kendisinin desteklediği makina numaraları ile karşılaştırmaktır. Önyükleyici tarafından yanlış bir makina numarası gönderildiğinde cihazın açılış mesajları aşağıdaki gibi sonlanacaktır.

Starting kernel ...
Uncompressing Linux................... done, booting the kernel

Starting kernel mesaji önyükleyicinin son, Uncompressing Linux ile başlayan mesaj ise çekirdeğin ilk mesajıdır. Çekirdek kodu içerisinde konsol(burada ttyS0) başlatılmadan önce çalışan kodlarla ile mesajları görmek için çekirdek CONFIG_DEBUG_LL anahtarı set edilerek derlenmelidir. Cihaz çekirdeğe, konsol argümanına ek olarak, "earlyprintk=serial,ttyS0" argümanları geçirilerek başlatıldığında ekran çıktısı aşağıdaki gibi olmaktadır. Desteklenen makina tipleri çekirdeğin konfigürasyonuna göre birden çok olabilir.

Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Error: unrecognized/unsupported machine ID (r1 = 0x00000356).
Available machine support:

ID (hex)        NAME
00000385        DaVinci DM644x EVM

NAND flash paketinden çıkan u-boot çekirdeğe DAVINCI_EVM’in numarası 901 sayısını göndermek yerine DAVINCI_DVDP’nin numarası olan 854’ü göndermektedir(açılış ekranında bu sayıların 16’lık tabandaki karşılıkları görülmektedir). Çekirdek kaynak kodu içeresindeki mach-types.h dosyasinda aşağıdaki değişiklik yapılarak bu sorun aşılabilir.

//#define MACH_TYPE_DAVINCI_DVDP         854
#define MACH_TYPE_DAVINCI_EVM            854
//#define MACH_TYPE_DAVINCI_EVM          901

Bir diğer problem ise çekirdeğin FLASH’dan hafızaya(RAM) çekildikten sonra başlatılması sırasında doğrulama hatasının alınmasıdır. Hata mesajı aşağıdaki gibidir.

DaVinci EVM # bootm 0x82000000
## Booting image at 82000000 ...
   Image Name:   Linux-2.6.35
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1557300 Bytes =  1.5 MB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... Bad Data CRC
OK

[3]

serkan@serkanDesktop:~/garbage/temporary/davinci/DM644x_FlashAndBootUtils_2_00/DM644x/GNU$ ./sfh_DM644x.exe -flash  -flashType NAND -targetType DM6446 -p /dev/ttyUSB1 ubl/ubl_DM6446_NAND.bin u-boot.bin
-----------------------------------------------------
   TI Serial Flasher Host Program for DM644x
   (C) 2010, Texas Instruments, Inc.
   Ver. 1.67
-----------------------------------------------------


Flashing UBL and application image: ubl/ubl_DM6446_NAND.bin and u-boot.bin. the NAND flash device on the DM6446

Attempting to connect to device /dev/ttyUSB1...
Press any key to end this program at any time.


Waiting for the DM644x...
BOOTME commmand received. Returning ACK and header...
ACK command sent. Waiting for BEGIN command...
Target:  BEGIN
BEGIN commmand received. Sending CRC table...
 100% [ ████████████████████████████████████████████████████ ]
                           CRC table sent.                            

Waiting for DONE...
DONE received.  Sending the UBL...
 100% [ ████████████████████████████████████████████████████ ]
                              UBL sent.                               

DONE received.  UBL was accepted.

Waiting for SFT on the DM644x...
Target:BOOTUBL
BOOTUBL commmand received. Returning CMD and command...
CMD value sent.  Waiting for DONE...
Target:   DONE
DONE received. Command was accepted.
Sending the UBL image
Waiting for SENDIMG sequence...
ACK command sent. Waiting for BEGIN command...
BEGIN commmand received.
 100%█████████████████████████████████████████████████████ ]
                  Image data transmitted over UART.                   

Waiting for DONE...
DONE received.  All bytes of image data received...
Target:Number of blocks needed for header and data: 0x0x00000001
Target:NAND block 0x00000001 is bad!!!
Target:NAND block 0x00000002 is bad!!!
Target:Attempting to start in block number 0x0x00000003.
Target:Magicnum: 0x0xA1ACED00
Target:Entrypoint: 0x0x00000100
Target:Numpage: 0x0x00000019
Target:Writing header and image data to Block 0x00000003, Page 0x00000000
Target:SENDING
Target:   DONE
Sending the Application image
Waiting for SENDIMG sequence...
ACK command sent. Waiting for BEGIN command...
BEGIN commmand received.
 100%██████████████████████████████████████████████████████]
                  Image data transmitted over UART.                   

Waiting for DONE...
DONE received.  All bytes of image data received...
Target:Number of blocks needed for header and data: 0x0x0000000D
Target:NAND block 0x00000006 is bad!!!
Target:NAND block 0x00000007 is bad!!!
Target:Attempting to start in block number 0x0x00000008.
Target:Magicnum: 0x0x55424CBB
Target:Entrypoint: 0x0x81080000
Target:Numpage: 0x0x00000197
Target:Writing header and image data to Block 0x00000008, Page 0x00000000
Target:   DONE

Operation completed successfully.

KAYNAKLAR

Uyarı: Nand’e uboot’tan yazarken blocksize’ın katı olmalıdır.

results matching ""

    No results matching ""