wiki/vi/ingenic-t31-unbrick-with-sd...

6.7 KiB

Mục lục

Phục hồi Ingenic T31 bằng thẻ SD

LƯU Ý:

Trên một số thiết bị, như nhiều model Wyze và Atom, thẻ SD được cấp nguồn thông qua kết nối GPIO
(Đầu vào/Đầu ra đa năng). Điều này có nghĩa là bạn phải kích hoạt một GPIO cụ thể trong U-Boot hoặc trong hệ thống Linux để cấp nguồn sử dụng thẻ SD. Nếu thiết bị của bạn được thiết lập theo cách này, bạn không thể sử dụng phương pháp này mà không thực hiện thay đổi vật lý đối với phần cứng.

Trình tự khởi động Ingenic T31

Nếu không khởi động được từ u-boot trên bộ nhớ flash, T31 sẽ thử khởi động từ thẻ SD, bất kể chân bootsel được đặt là gì. Vì vậy, nếu u-boot trên chip flash bị hỏng, chúng ta có thể ghi u-boot vào thẻ SD và khởi động từ đó. Tệp u-boot phải được biên dịch đặc biệt để khởi động thẻ SD, bạn không thể sử dụng tệp dành cho khởi động flash thông thường.

Biên dịch u-boot để khởi động thẻ SD

mkdir /opt/openipc
cd /opt/openipc
git clone https://github.com/Dafang-Hacks/mips-gcc472-glibc216-64bit.git
git clone https://github.com/OpenIPC/u-boot-ingenic.git
export PATH="$PATH:/opt/openipc/mips-gcc472-glibc216-64bit/bin"
cd u-boot-ingenic
make distclean

Bây giờ hãy chọn lệnh make cuối cùng theo loại chip T31 của bạn

SoC Lệnh
T31N make isvp_t31_msc0
T31L make isvp_t31_msc0_lite
T31X make isvp_t31_msc0_ddr128M
T31A make isvp_t31a_msc0_ddr128M

Bây giờ bạn sẽ nhận được tệp u-boot đã biên dịch u-boot-with-spl.bin

Ghi u-boot vào thẻ SD

Lắp thẻ SD vào PC của bạn, chạy fdisk -l để kiểm tra, bạn sẽ thấy thiết bị giống như trong trường hợp của tôi là Disk /dev/sdb: 29.72 GiB, 31914983424 bytes, 62333952 sectors.

THẬN TRỌNG! kiểm tra kỹ tên thiết bị /dev có thực sự là thẻ SD của bạn hay không, nếu không bạn có thể mất dữ liệu trên các ổ đĩa khác

dd if=./u-boot-with-spl.bin of=/dev/sdb bs=512 seek=34

Điều này sẽ ghi tệp u-boot vào thẻ SD ở vị trí offset 17KB từ 0x0

Khởi động từ thẻ SD

Nếu u-boot gốc trên chip flash bị hỏng hoặc trống, nó sẽ tự động chọn khởi động từ thẻ SD, nhưng nếu bạn chỉ muốn tải u-boot của riêng mình khi có u-boot đang hoạt động trên chip flash và chân bootsel của bảng mạch PCB camera được đặt thành 1, nó sẽ vẫn khởi động từ u-boot trên chip flash. Để buộc khởi động từ thẻ SD, bạn có thể ngắn mạch chân 5 và 6 của chip flash SOIC8 khi cấp nguồn cho camera để chặn việc đọc bộ nhớ flash, chi tiết tại đây.

Vấn đề tự động đặt lại của u-boot OpenIPC

U-boot của OpenIPC sẽ tự động đặt lại nếu không tải được kernel từ địa chỉ mặc định, nếu bạn đang cố gắng tải u-boot từ thẻ SD khi có một u-boot hợp lệ trên chip flash, điều này sẽ dẫn đến việc camera khởi động lại u-boot ban đầu. Để tắt chức năng tự động đặt lại, hãy chỉnh sửa include/configs/isvp_common.h, xóa ; reset khỏi phần cuối của dòng bootcmd

u-boot cho các SoC Ingenic khác T10 T20 T21 & T30

u-boot có thể được xây dựng để khởi động thẻ SD cho các SoC này, nhưng chưa được xác minh trên thiết bị thực

T10 & T20

SoC Lệnh
T10 make isvp_t10_msc0
T20 make isvp_t20_msc0

T21 & T30

Chỉnh sửa /opt/openipc/u-boot-ingenic/boards.cfg thêm các dòng sau

isvp_t21_msc0                mips        xburst      isvp_t21            ingenic        t21         isvp_t21:SPL_MMC_SUPPORT,ENV_IS_IN_MMC,JZ_MMC_MSC0,SFC_COMMOND
isvp_t30_msc0                mips        xburst      isvp_t30            ingenic        t30        isvp_t30:SPL_MMC_SUPPORT,ENV_IS_IN_MMC,GPT_CREATOR,JZ_MMC_MSC0,SFC_COMMOND
isvp_t30_msc0_lite           mips        xburst      isvp_t30            ingenic        t30        isvp_t30:SPL_MMC_SUPPORT,ENV_IS_IN_MMC,GPT_CREATOR,JZ_MMC_MSC0,SFC_COMMOND,LITE_VERSION
isvp_t30_msc0_ddr128M        mips        xburst      isvp_t30            ingenic        t30        isvp_t30:SPL_MMC_SUPPORT,ENV_IS_IN_MMC,GPT_CREATOR,JZ_MMC_MSC0,SFC_COMMOND,DDR2_128M
isvp_t30a_msc0_ddr128M       mips        xburst      isvp_t30            ingenic        t30        isvp_t30:SPL_MMC_SUPPORT,ENV_IS_IN_MMC,GPT_CREATOR,JZ_MMC_MSC0,SFC_COMMOND,DDR2_128M,T30A

Chọn lệnh make theo loại chip của bạn

SoC Lệnh
T21 make isvp_t21_msc0
T30N make isvp_t30_msc0
T30L make isvp_t30_msc0_lite
T30X make isvp_t30_msc0_ddr128M
T30A make isvp_t30a_msc0_ddr128M

Cài đặt OpenIPC từ thẻ SD trong u-boot

Sử dụng T31ZX với flash NOR 16MB làm ví dụ, tải xuống ảnh full size 16MB

Phương pháp 1

Được sử dụng nếu có lệnh mmc nhưng không có lệnh fatload trong u-boot, chúng ta có thể ghi firmware vào thẻ SD mà không cần bất kỳ hệ thống tệp nào

THẬN TRỌNG! kiểm tra kỹ tên thiết bị /dev có thực sự là thẻ SD của bạn hay không, nếu không bạn có thể mất dữ liệu trên các ổ đĩa khác

dd if=./openipc-t31x-ultimate-16mb.bin of=/dev/[thiết-bị-thẻ-sd] seek=20480

Điều này sẽ ghi hình ảnh OpenIPC vào thẻ SD ở offset 10MB, khi kích thước khối thẻ là 512 byte

Trong u-boot, chạy

mw.b 0x80600000 0xff 0x1000000
mmc read 0x80600000 0x5000 0x8000
sf probe 0
sf erase 0x0 0x1000000
sf write 0x80600000 0x0 0x1000000

Phương pháp 2

Được sử dụng nếu có lệnh fatload trong u-boot để tải trực tiếp tệp từ hệ thống tệp FAT

Gắn kết hệ thống tệp FAT của thẻ SD vào PC của bạn, sao chép hình ảnh firmware OpenIPC vào đó. Trong u-boot, chạy fatls mmc 0 để liệt kê các tệp trong thẻ SD, sau đó

mw.b 0x80600000 0xff 0x1000000
fatload mmc 0 0x80600000 openipc-t31zx-ultimate-16mb.bin
sf probe 0
sf erase 0x0 0x1000000
sf write 0x80600000 0x0 0x1000000