В этой статье рассказывается о компиляции и упаковке U-Boot, базовой настройке, использовании общих команд, основных методах отладки и т. д., что обеспечивает основу для трансплантации U-BOOT и разработки приложений.
Этот документ относится к Brandy2.0, платформе U-Boot-2018.
Разработчики/сопровождающие U-Boot, разработчики ядра.
Перейдите в .buildconfig в каталоге longan и проверьте, используются ли в данный момент следующие макросы LICHEE.
LICHEE_IC ——> Имя IC\
LICHEE_CHIP ——> Название платформы\
LICHEE_BOARD ——> Уровень советаимя\
LICHEE_ARCH ——> Принадлежащая структура\
LICHEE_BOARD_CONFIG_DIR ——> Уровень совета Оглавление\
LICHEE_BRANDY_OUT_DIR ——> каталог файлов bin\
LICHEE_PLAT_OUT ——> Временный каталог bin платформы существует\
LICHEE_CHIP_CONFIG_DIR ——> Каталог ИС
Шаги по подготовке ссылки на инструмент компиляции следующие:
1)cd longan/brandy/brandy-2.0/\
2)./build.sh -t
В каталоге longan/brandy/brandy-2.0/ выполните ./build.sh -p имя платформы, чтобы быстро завершить все действие компиляции загрузки. Название платформы относится к LICHEE_CHIP.
./build.sh -p {LICHEE_CHIP} //Быстрая компиляцияspl/U-Boot
./build.sh -o spl-pub -p {LICHEE_CHIP} //Быстрая компиляцияspl-pub
./build.sh -o uboot -p {LICHEE_CHIP} //Быстрая компиляцияU-Boot
cd longan/brandy/brandy-2.0/u-boot-2018/, чтобы войти в каталог u-boot-2018. Взяв в качестве примера {LICHEE_CHIP}, просто выполните последовательно следующие операции.
1)make {LICHEE_CHIP}_defconfig
2)make -j
cd longan/brandy/brandy-2.0/spl-pub для входа в каталог spl-pub. Вам необходимо установить параметры платформы и модуля для компиляции. На примере {LICHEE_CHIP} метод компиляции nand/emmc выглядит следующим образом:
make distclean
make p={LICHEE_CHIP} m=nand
make boot0
make distclean
make p={LICHEE_CHIP} m=emmc
make boot0
make distclean
make p={LICHEE_CHIP} m=fes
make fes
make distclean
make p={LICHEE_CHIP} m=sboot
make sboot
Во встроенных операционных системах BootLoader/U-Boot запускается до запуска ядра операционной системы. Он может инициализировать аппаратные устройства и создавать диаграммы отображения пространства памяти, чтобы привести программную и аппаратную среду системы в подходящее состояние и подготовить правильную среду для окончательного вызова ядра операционной системы. На платформе Sunxi, помимо необходимой функции запуска системы загрузки, система BOOT также предоставляет другие функции, такие как программирование и обновление.
Основные функции U-Boot можно разделить на следующие категории:
Различные функции U-Boot можно включать и отключать с помощью defconfig или меню конфигурации. Конкретная конфигурация — это.
Метод заключается в следующем:
Рисунок 4-1: Схема конфигурации defconfig
Шаги для настройки через менюconfig следующие:
Рисунок 4-2: Схема меню конфигурации меню.
Начиная с Linux-5.4, U-Boot больше не использует sysconfig и dts ядра в качестве файлов конфигурации, а использует собственные dts U-Boot для настройки параметров. kernel-dts и U-Boot-dts полностью независимы.
U-Boot-dts путьдля:vim longan/brandy/brandy-2.0/u-boot-2018/arch/arm/dts
Элементы конфигурации | Элементы конфигурациизначение |
---|---|
CONFIG_OF_SEPARATE | Создайте дерево устройств U-Boot, чтобы стать частью U-Boot. |
CONFIG_OF_BOARD | Отключить использование внешнего dts |
CONFIG_DEFAULT_DEVICE_TREE | Выберите имя файла встроенного файла dts. |
CONFIG_SUNXI_NECESSARY_REPLACE_FDT | Включите опцию замены внутренних dts на внешние dts. |
Элементы конфигурации | Параметры |
---|---|
CONFIG_OF_SEPARATE | y |
CONFIG_OF_BOARD | n |
CONFIG_DEFAULT_DEVICE_TREE | “{LICHEE_CHIP}-soc-system” |
CONFIG_SUNXI_NECESSARY_REPLACE_FDT | y |
1. DTS делится на DTS уровня платы и системный DTS.
Системные dts определяются CONFIG_DEFAULT_DEVICE_TREE, определение которого можно найти в $(CONFIG_SYS_CONFIG_NAME)_defconfig.
Системные dts в конечном итоге будут включать dts уровня платы, путь к файлу {LICHEE_BOARD_CONFIG_DIR}, имя файла: uboot-board.dts.
OBJCOPY examples/standalone/hello_world.srec
OBJCOPY examples/standalone/hello_world.bin
LD u-boot
OBJCOPY u-boot.srec
OBJCOPY u-boot-nodtb.bin
‘{LICHEE_BOARD_CONFIG_DIR}/uboot-board.dts’ -> ‘~/longan/brandy/brandy-2.0/u-boot-2018/
arch/{LICHEE_ARCH}/dts/.board-uboot.dts’
DTC arch/{LICHEE_ARCH}/dts/{LICHEE_CHIP}-soc-system.dtb
SYM u-boot.sym
SHIPPED dts/dt.dtb
FDTGREP dts/dt-spl.dtb
COPY u-boot.dtb
CAT u-boot-dtb.bin
COPY u-boot.bin
‘u-boot.bin’ -> ‘{LICHEE_CHIP}.bin’ ‘u-boot-g{LICHEE_CHIP}.bin’ -> ‘{LICHEE_BRANDY_OUT_DIR}/bin/u-boot-g{LICHEE_CHIP}.bin’ ‘u-boot-g{LICHEE_CHIP}.bin’ -> ‘{LICHEE_PLAT_OUT}/u-boot-g{LICHEE_CHIP}.bin’
CFGCHK u-boot.cfg
Если системные dts и dts уровня платы существуют в узлах с одинаковым именем и по одному и тому же пути, dts уровня платы перезапишет системные dts.
Рисунок 4-3: Диаграмма изменения dts
[04.562]update bootcmd
[04.576]change working_fdt 0x7bebee58 to 0x7be8ee58
[04.587]update dts
Hit any key to stop autoboot: 0
=> set
set_working_fdt setenv setexpr
=> set_working_fdt 0x7bebee58
change working_fdt 0x7be8ee58 to 0x7bebee58
=>
Вы можете просмотреть и изменить переменные среды в {LICHEE_CHIP_CONFIG_DIR}/configs/default/env.cfg с помощью команды env. Во время запуска миникомпьютера нажмите любую клавишу, чтобы войти в состояние команды оболочки U-Boot, и введите команду «env», чтобы просмотреть справочную информацию по команде.
Конкретные примеры заключаются в следующем:
=> pri
ab_partition_list=bootloader,env,boot,vendor_boot,dtbo,vbmeta,vbmeta_system,vbmeta_vendor
android_trust_chain=true
boot_fastboot=fastboot
boot_normal=sunxi_flash read 45000000 boot;bootm 45000000
boot_recovery=sunxi_flash read 45000000 recovery;bootm 45000000
bootcmd=run setargs_mmc boot_normal
bootdelay=0
bootreason=charger
bt_mac=20:A1:11:12:13:44
cma=8M
console=ttyAS0,115200
earlyprintk=sunxi-uart,0x05000000
fdtcontroladdr=7bed0e60
fileaddr=40000000
filesize=15cf6
force_normal_boot=1
init=/init
initcall_debug=0
keybox_list=widevine,ec_key,ec_cert1,ec_cert2,ec_cert3,rsa_key,rsa_cert1,rsa_cert2,rsa_cert3
loglevel=8
mac=10:14:15:15:9A:CA
mmc_root=/dev/mmcblk0p4
nand_root=/dev/nand0p4
partitions=bootloader_a@mmcblk0p1:bootloader_b@mmcblk0p2:env_a@mmcblk0p3:env_b@mmcblk0p4:
boot_a@mmcblk0p5:boot_b@mmcblk0p6:vendor_boot_a@mmcblk0p7:vendor_boot_b@mmcblk0p8:
super@mmcblk0p9:misc@mmcblk0p10:vbmeta_a@mmcblk0p11:vbmeta_b@mmcblk0p12:
vbmeta_system_a@mmcblk0p13:vbmeta_system_b@mmcblk0p14:vbmeta_vendor_a@mmcblk0p15:
vbmeta_vendor_b@mmcblk0p16:frp@mmcblk0p17:empty@mmcblk0p18:metadata@mmcblk0p19:
private@mmcblk0p20:dtbo_a@mmcblk0p21:dtbo_b@mmcblk0p22:media_data@mmcblk0p23:
UDISK@mmcblk0p24
rotpk_status=0
setargs_mmc=setenv bootargs earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${
initcall_debug} console=${console} loglevel=${loglevel} root=${mmc_root} init=${init}
cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac}
specialstr=${specialstr} gpt=1 androidboot.force_normal_boot=${force_normal_boot}
androidboot.slot_suffix=${slot_suffix}
setargs_nand=setenv bootargs earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${
initcall_debug} console=${console} loglevel=${loglevel} root=${nand_root} init=${init}
cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac}
specialstr=${specialstr} gpt=1 androidboot.force_normal_boot=${force_normal_boot}
androidboot.slot_suffix=${slot_suffix}
slot_suffix=_a
snum=A100B3N041
wifi_mac=10:A1:11:12:13:44
Environment size: 2078/131068 bytes
=>
Используйте следующую команду для чтения данных по указанному адресу флэш-памяти по указанному адресу DRAM:
sunxi_flash read dram_addr flash_addr
sunxi_flash read 0x45000000 env — чтение данных раздела env по адресу 0x45000000 DRAM.
sunxi_flash read 45000000 boot;bootm 45000000 — чтение данных загрузочного раздела flashсередина в расположение DRAM 0x45000000. адрес и Началось с 0x45000000.
Fastboot — это универсальный инструмент для прошивки на платформе Android, а также хороший инструмент для разработки и отладки. Ниже описаны основные принципы использования fastboot.
Инструмент fastboot для ПК можно получить из Google Android SDK (Android-sdk-windows/tools) или сгенерированного файла после компиляции исходного кода Android (out/host/linux-x86/bin).
В системах Linux использование fastboot не требует установки драйвера. Однако в системах Windows перед использованием fastboot необходимо установить драйверы, связанные с fastboot. Драйвер adb также можно успешно установить в режиме быстрой загрузки, но его нельзя использовать. Используйте предоставленный нами драйвер и установите его вручную.
=> part list sunxi_flash 0
Partition Map for UNKNOWN device 0 -- Partition Type: EFI
Part Start LBA End LBA Name
Attributes
Type GUID
Partition GUID
1 0x00008000 0x00017fff "bootloader"
attrs: 0x8000000000000000
type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
guid: a0085546-4166-744a-a353-fca9272b8e45
2 0x00018000 0x0001ffff "env"
attrs: 0x8000000000000000
type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
guid: a0085546-4166-744a-a353-fca9272b8e46
3 0x00020000 0x0002ffff "boot"
attrs: 0x8000000000000000
type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
guid: a0085546-4166-744a-a353-fca9272b8e47
4 0x00030000 0x0032ffff "super"
attrs: 0x8000000000000000
type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
guid: a0085546-4166-744a-a353-fca9272b8e48
5 0x00330000 0x00337fff "misc"
attrs: 0x8000000000000000
type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
guid: a0085546-4166-744a-a353-fca9272b8e49
6 0x00338000 0x00347fff "recovery"
attrs: 0x8000000000000000
type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
guid: a0085546-4166-744a-a353-fca9272b8e4a
Команда fat может запрашивать, читать и записывать файлы на устройствах хранения данных, относящихся к файловой системе FAT. При упаковке прошивки мы создадим образ раздела загрузочных ресурсов и упорядочим файлы в указанном каталоге в соответствии с форматом файловой системы. . Все файлы в исходном каталоге включены и полностью упорядочены в соответствии со структурой каталогов. Когда этот файл образа будет записан в раздел на устройстве хранения, вы увидите, что содержимое этого раздела такое же, как и в исходном каталоге. Используя FAT, вы можете легко получить доступ к данным с флэш-памяти миникомпьютера в виде файлов и каталогов, например, для отображения логотипов. Эти команды в основном используются вместе с U-диском или SD-картой и в основном используются для чтения раздела FAT на этих съемных носителях. Соответствующие рабочие команды следующие:
Рисунок 5-1: Пример диаграммы выполнения команды Fatls
иллюстрировать
Пополнитьиллюстрировать,fatls mmc 2:2 первый из 2 означает emmc оборудование, 2 означает его номер раздела,Чтоиллюстрироватьследующеекартина:
картина 5-2: fatls Параметры командыиллюстрироватькартина
изображение 5-3: пример выполнения команды fatinfo
sunxi#usb start
(Re)start USB...
USB0: start sunxi ehci1...
config usb pin success
config usb clk ok
sunxi ehci1 init ok...
USB EHCI 1.00
scanning bus 0 for devices... 3 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
sunxi#fatls usb 0:1 /
16024600 sandisksecureaccessv3_win.exe
sandisk secureaccess/
lost.dir/
Android/
test/
video test/
amapauto/
0 vid_20161017_160818.ts
phoenixsuit/
system volume information/
0 vid_20161017_160919.ts
video/
156672 wifi pro_com su.exe
495 sys.ini
1035 pr_80211g_all.ini
config/
158208 wifi pro_new.exe
158208 wifi pro.exe
0 vid_20161017_164822.ts
0 vid_20161017_164906.ts
sunxi-tvd/
71149 sys_config.fex
vga/
397836884 system.img
14180352 boot.img
13 file(s), 13 dir(s)
sunxi#fatload usb 0:1 0x42000000 boot.img
reading boot.img
14180352 bytes read in 1149 ms (11.8 MiB/s)
sunxi#mmc dev 2
mmc2(part 0) is current device
sunxi#mmc write 0x42000000 0x15000 5000
MMC write: dev # 2, block # 86016, count 20480 ... 20480 blocks written: OK
иллюстрировать:Вот и вседействовать Вскоре U Запишите boot.img диска в соответствующий mmc Адрес раздела.
Команда md может просмотреть данные указанной памяти, что удобно для понимания состояния данных памяти и отладки работы. Как его использовать:
md 0xF0000000: Прямо сейчас используйте команду md Проверять память DRAM Содержимое по адресу 0xF0000000
FDT: сокращение для плоского дерева устройств. После остановки консоли U-Boot введите fdt, чтобы просмотреть справку по команде fdt.
sunxi#fdt
fdt - flattened device tree utility commands
Usage:
fdt addr [-c] <addr> [<length>] - Set the [control] fdt location to <addr>
fdt move <fdt> <newaddr> <length> - Copy the fdt to <addr> and make it active
fdt resize - Resize fdt to size + padding to 4k addr
fdt print <path> [<prop>] - Recursive print starting at <path>
fdt list <path> [<prop>] - Print one level starting at <path>
fdt get value <var> <path> <prop> - Get <property> and store in <var>
fdt get name <var> <path> <index> - Get name of node <index> and store in <var>
fdt get addr <var> <path> <prop> - Get start address of <property> and store in <var>
fdt get size <var> <path> [<prop>] - Get size of [<property>] or num nodes and store in <var>
fdt set <path> <prop> [<val>] - Set <property> [to <val>]
fdt mknode <path> <node> - Create a new node after <path>
fdt rm <path> [<prop>] - Delete the node or <property>
fdt header
fdt bootcpu <id> - Set boot cpuid
fdt memory <addr> <size> - Add/Update memory node
fdt rsvmem print - Show current mem reserves
fdt rsvmem add <addr> <size> - Add a mem reserve
fdt rsvmem delete <index> - Delete a mem reserves
fdt chosen [<start> <end>] - Add/update the /chosen branch in the tree
<start>/<end> - initrd start/end addr
NOTE: Dereference aliases by omiting the leading '/', e.g. fdt print ethernet0。
sunxi#
иллюстрировать
Обычно используемые команды: fdt list и fdt set. fdt list используется для запроса конфигурации узла, а fdt set используется для изменения конфигурации узла.
Сначала определите путь к запрашиваемому полю в дереве устройств. Если вы не знаете путь, вам нужно использовать команду fdt и выполнить следующие действия.
запрос строки. 1. Найдите корневой каталог.
sunxi#fdt list /
/ {
model = "{LICHEE_CHIP}";
compatible = "arm,{LICHEE_CHIP}", "arm,{LICHEE_CHIP}";
interrupt-parent = <0x00000001>;
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
......................
cpuscfg {
};
ion {
};
dram {
};
memory@40000000 {
};
interrupt-controller@1c81000 {
};
sunxi-chipid@1c14200 {
};
timer {
};
pmu {
};
dvfs_table {
};
dramfreq {
};
gpu@0x01c40000 {
};
wlan {
};
bt {
};
btlpm {
};
};
Если вы найдете необходимую конфигурацию, например конфигурацию WLAN, просто выполните следующую команду.
sunxi#fdt list /wlan //Внимание путьсередина /
wlan {
compatible = "allwinner,sunxi-wlan";
clocks = <0x00000096>;
wlan_power = "vcc-wifi";
wlan_io_regulator = "vcc-wifi-io";
wlan_busnum = <0x00000001>;
status = "okay";
device_type = "wlan";
wlan_regon = <0x00000077 0x0000000b 0x00000002 0x00000001 0xffffffff 0xffffffff 0
x00000000>;
wlan_hostwake = <0x00000077 0x0000000b 0x00000003 0x00000006 0xffffffff 0xffffffff
0x00000000>;
};
sunxi#fdt list /soc
soc@01c00000 {
compatible = "simple-bus";
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
ranges;
device_type = "soc";
......................
hdmi@01ee0000 {
};
tr@01000000 {
};
pwm@01c21400 {
};
nand0@01c03000 {
};
thermal_sensor {
};
cpu_budget_cool {
};
.......................
};
Затем используйте следующую команду, чтобы отобразить его:
sunxi#fdt list /soc/nand0
nand0@01c03000 {
compatible = "allwinner,sun50i-nand";
device_type = "nand0";
reg = <0x00000000 0x01c03000 0x00000000 0x00001000>;
interrupts = <0x00000000 0x00000046 0x00000004>;
clocks = <0x00000004 0x0000007e>;
pinctrl-names = "default", "sleep";
pinctrl-1 = <0x00000081>;
nand0_regulator1 = "vcc-nand";
nand0_regulator2 = "none";
nand0_cache_level = <0x55aaaa55>;
nand0_flush_cache_num = <0x55aaaa55>;
nand0_capacity_level = <0x55aaaa55>;
nand0_id_number_ctl = <0x55aaaa55>;
nand0_print_level = <0x55aaaa55>;
nand0_p0 = <0x55aaaa55>;
nand0_p1 = <0x55aaaa55>;
nand0_p2 = <0x55aaaa55>;
nand0_p3 = <0x55aaaa55>;
status = "disabled";
nand0_support_2ch = <0x00000000>;
pinctrl-0 = <0x000000a9 0x000000aa>;
};
sunxi#fdt list /aliases
aliases {
serial0 = "/soc@01c00000/uart@01c28000";
..............
mmc0 = "/soc@01c00000/sdmmc@01c0f000";
mmc2 = "/soc@01c00000/sdmmc@01C11000";
nand0 = "/soc@01c00000/nand0@01c03000";
disp = "/soc@01c00000/disp@01000000";
lcd0 = "/soc@01c00000/lcd0@01c0c000";
hdmi = "/soc@01c00000/hdmi@01ee0000";
pwm = "/soc@01c00000/pwm@01c21400";
boot_disp = "/soc@01c00000/boot_disp";
};
sunxi#
Поскольку псевдоним пути узла nand0 настроен, вы можете использовать следующую команду для отображения информации о конфигурации узла nand0.
sunxi#fdt list nand0
nand0@01c03000 {
compatible = "allwinner,sun50i-nand";
device_type = "nand0";
reg = <0x00000000 0x01c03000 0x00000000 0x00001000>;
..................
pinctrl-names = "default", "sleep";
pinctrl-1 = <0x00000081>;
};
Примечание. Во всех командах fdt в качестве параметра пути можно использовать псевдоним.
fdt list <path> [<prop>] - Print one level starting at <path>
fdt set <path> <prop> [<val>] - Set <property> [to <val>]
Формат команды: fdt set path prop Пример: фдт set /wlan wlan_busnum <0x2>
sunxi#fdt list /wlan
wlan {
compatible = "allwinner,sunxi-wlan";
clocks = <0x00000096>;
wlan_power = "vcc-wifi";
wlan_io_regulator = "vcc-wifi-io";
wlan_busnum = <0x00000001>;
status = "disable";
device_type = "wlan";
};
sunxi#fdt set /wlan wlan_busnum <0x2>
sunxi#fdt list /wlan
wlan {
compatible = "allwinner,sunxi-wlan";
clocks = <0x00000096>;
wlan_power = "vcc-wifi";
wlan_io_regulator = "vcc-wifi-io";
wlan_busnum = <0x00000002>; //Исправлятьназад status = "disable";
device_type = "wlan";
};
Примечание: Исправлять — целое число.,Форма конфигурации для массива также может быть использована по мере необходимости.,Нужно разделять пробелами。Формат команды: fdt set path prop <0x1 0x2 0x3>
Формат команды: fdt set path prop “xxxxx” Пример: фдт set /wlan status “disable”
sunxi#fdt list /wlan
wlan {
compatible = "allwinner,sunxi-wlan";
clocks = <0x00000096>;
wlan_power = "vcc-wifi";
wlan_io_regulator = "vcc-wifi-io";
wlan_busnum = <0x00000001>;
status = "okay";
device_type = "wlan";
};
sunxi#fdt set /wlan status "disable"
sunxi#fdt list /wlan
wlan {
compatible = "allwinner,sunxi-wlan";
clocks = <0x00000096>;
wlan_power = "vcc-wifi";
wlan_io_regulator = "vcc-wifi-io";
wlan_busnum = <0x00000001>;
status = "disable"; //Исправлятьназад device_type = "wlan";
};
sunxi#
Примечание: Исправлять, когда строка,Форма конфигурации для массива также может быть использована по мере необходимости.,Необходимо разделить пробелами. Формат команды: fdt set path prop «string1» «string2»
Соответствие интерфейсаизчисловой номериллюстрироватьследующее:
#define PA 0
#define PB 1
#define PC 2
#define PD 3
#define PE 4
#define PF 5
#define PG 6
#define PH 7
#define PI 8
#define PJ 9
#define PK 10
#define PL 11
#define PM 12
#define PN 13
#define PO 14
#define PP 15
#define default 0xffffffff
Sysconfig описано в gpio изформаследующее:Port:порт+Серийный номер внутри группы<Функциональное распределение><Статус внутреннего сопротивления><способность вождения><Статус выходного уровня>
Узлы Pinctrl делятся на cpux и cpus. Соответствующие пути к узлам следующие: Cpux: /soc/pinctrl@01c20800 Cpus:/soc/pinctrl@01f02c00.
PIN Конфигурацияполе атрибутаиллюстрировать:
поле атрибута | значение |
---|---|
allwinner,function | Соответствует имени первичного ключа в sysconfig. |
allwinner,pins | Соответствует имени порта в каждой конфигурации gpio в sysconfig. |
allwinner,pname | Соответствует имени подраздела первичного ключа в sysconfig. |
allwinner,muxsel | Функциональное распределение |
allwinner,pull | Статус внутреннего сопротивления |
allwinner,drive | способность вождения |
allwinner,data | Статус выходного уровня |
иллюстрировать
Среди них 0xffffffff означает использование значения по умолчанию.
Проверьте конфигурацию PIN-кода cpux следующим образом.
sunxi#fdt list /soc/pinctrl@01c20800/lcd0
lcd0@0 {
linux,phandle = <0x000000ab>;
phandle = <0x000000ab>;
allwinner,pins = "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PD18", "PD19", "PD20", "PD21";
allwinner,function = "lcd0";
allwinner,pname = "lcdd0", "lcdd1", "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", "lcdd8", "lcdd9";
allwinner,muxsel = <0x00000003>;
allwinner,pull = <0x00000000>;
allwinner,drive = <0xffffffff>;
allwinner,data = <0xffffffff>;
};
sunxi#
Проверьте конфигурацию PIN-кода процессора следующим образом.
sunxi# fdt list /soc/pinctrl@01f02c00/s_uart0
s_uart0@0 {
linux,phandle = <0x000000b4>;
phandle = <0x000000b4>;
allwinner,pins = "PL2", "PL3";
allwinner,function = "s_uart0";
allwinner,pname = "s_uart0_tx", "s_uart0_rx";
allwinner,muxsel = <0x00000002>;
allwinner,pull = <0xffffffff>;
allwinner,drive = <0xffffffff>;
allwinner,data = <0xffffffff>;
};
sunxi#
использовать fdt Команда set может изменить PIN середина Связанныйполе атрибута
sunxi#fdt set /soc/pinctrl@01c20800/lcd0 allwinner,drive <0x1>
sunxi#fdt list /soc/pinctrl@01c20800/lcd0
lcd0@0 {
linux,phandle = <0x000000ab>;
phandle = <0x000000ab>;
allwinner,pins = "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", "PD18", "PD19", "PD20", "PD21";
allwinner,function = "lcd0";
allwinner,pname = "lcdd0", "lcdd1", "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", "lcdd8", "lcdd9";
allwinner,muxsel = <0x00000003>;
allwinner,pull = <0x00000000>;
allwinner,drive = <0x00000001>;
allwinner,data = <0xffffffff>;
};
иллюстрировать
Пример середина, где Исправлять повлияет на все порты, представленные allwinner,pins вождения Конфигурация,Исправлятьallwinner,muxsel, Значения allwinner, pull, allwinner и data также будут иметь аналогичный эффект.
Соответствие GPIO в дереве устройств, на примере usb_id_gpio в usb
sunxi#fdt list /soc/usbc0
usbc0@0 {
test = <0x00000002 0x00000003 0x12345678>;
device_type = "usbc0";
compatible = "allwinner,sun50i-otg-manager";
........
usb_serial_unique = <0x00000000>;
usb_serial_number = "20080411";
rndis_wceis = <0x00000001>;
status = "okay";
usb_id_gpio = <0x00000030 0x00000007 0x00000009 0x00000000 0x00000001 0xffffffff 0xffffffff>;
};
соответствует device tree середина usb_id_gpio = <0x00000030 0x00000007 0x00000009 0x00000000 0x00000001 0xffffffff 0xffffffff>,объяснятьследующее:
Значение атрибута | значение |
---|---|
0x00000030 | Информация, относящаяся к узлу в дереве устройств, которую здесь можно пропустить. |
0x00000007 | Порт PH, т.е. #define PH 7 |
0x00000009 | Серийный номер внутри группы, т.е. PH09. |
0x00000000 | Функциональное распределение, Вскоре PH09 настроен как вход |
0x00000001 | Статус внутреннего сопротивления, Оснащен системой подтягивания. |
0xffffffff | способность вождения, значение по умолчанию |
0xffffffff | выходной уровень, значение по умолчанию |
Если вам нужно изменить usb_id_gpio Конфигурация может быть следующей (пример Исправить способность вождения, пункты второго уровня вывода):
sunxi#fdt set /soc/usbc0 usb_id_gpio <0x00000030 0x00000007 0x00000009 0x00000000 0x00000001 0x2 0x1>
sunxi#fdt list
usbc0@0 {
test = <0x00000002 0x00000003 0x12345678>;
device_type = "usbc0";
compatible = "allwinner,sun50i-otg-manager";
........
usb_serial_unique = <0x00000000>;
usb_serial_number = "20080411";
rndis_wceis = <0x00000001>;
status = "okay";
usb_id_gpio = <0x00000030 0x00000007 0x00000009 0x00000000 0x00000001 0x00000002 0x00000001>; //Исправлятьok
};
sunxi#
5.7 Другие команды иллюстрировать (загрузка, reset, efex)
иллюстрировать
Примечание. Для получения дополнительной информации о других командах U-Boot введите состояние команды оболочки U-Boot и введите «help», чтобы узнать больше.
отладочная информация вводится следующим образом:
• Функция: получить значение указанного атрибута.
• параметр:
• fdt: Работа flattened device tree
• nodeoffset: Смещение узла, который нужно изменить
• name: Имя атрибута, который нужно получить
• lenp: Получить длину значения атрибута (будет перезаписано) или NULL
• возвращаться:
• ненулевое значение (указатель на значение свойства): успех
• NULL(lenp пусто): не удалось
• Код неисправности (lenp не пусто): не удалось
• Функция: Установить статус узла
• параметр:
• fdt: Работа flattened device tree
• nodeoffset: Смещение узла, который нужно изменить
• status:FDT_STATUS_OKAY, FDT_STATUS_DISABLED, FDT_STATUS_FAIL, FDT_STATUS_FAIL_ERROR_CODE
• error_code:optional, only used if status is FDT_STATUS_FAIL_ERROR_CODE
• возвращаться:
• 0: успех
• Нет 0: неудача
• Функция: найти смещение узла по полному пути.
• параметр:
• fdt: Работа fdt
• path: полное имя пути
• возвращаться:
• >=0(узелизкомпенсировать): успех
• <0: неудачный код
• Функция: Установите значение атрибута на единицу. 32 Целочисленное значение бита. Если значение атрибута не существует, создайте новый атрибут.
• параметр:
• fdt: Работа flattened device tree
• nodeoffset: Смещение узла, который нужно изменить
• name: Имя атрибута, который нужно изменить
• val:32 целевое значение бита
• возвращаться:
• 0: успех
• <0: неудачный код
• Функция: аналогично fdt_setprop_u32, устанавливает значение атрибута равным единице. 64 Целочисленное значение бита. Если значение атрибута не существует, создайте новый атрибут.
• параметр:
• fdt: Работа flattened device tree
• nodeoffset: Смещение узла, который нужно изменить
• name: Имя атрибута, который нужно изменить
• val:64 целевое значение бита
• возвращаться:
• 0: успех
• <0: неудачный код
• Функция: Установите значение атрибута на единицу.String,Если значение атрибута не существует, существует,Затем создайте новый атрибут
• параметр:
• fdt: Работа flattened device tree
• nodeoffset: Смещение узла, который нужно изменить
• name: Имя атрибута, который нужно изменить
• str: целевое значение
• возвращаться:
• 0: успех
• <0: неудачный код
Примечание: существует sys_config.fex Конфигурациясередина, статус включения узла для 0 или 1. конвертировать в fdt соответствующий середине status Свойство отключено или все в порядке.
• Функция: сохранить изменения в flash
• параметр:
• fdt_buf: текущий Работа flattened device tree
• fdt_size: текущий Работа flattened device tree Размер можно передать через fdt_totalsize(fdt_buf )Получать
• возвращаться:
• 0: успех
• <0: неудача
U-Boot середина fdt Реализация командной строки: cmd/fdt.c
• Функция: установка переменных среды varname Значение установлено на varvalue, недействительно после перезапуска
• параметр:
• varname: Имя переменной среды, которую необходимо установить.
• varvalue: Измените указанную переменную среды на это значение.
• возвращаться:
• 0: успех
• Нет 0: неудача
• Функция: получить значение указанной переменной среды.
• параметр:
• name: имя переменной
• возвращаться:
• NULL: неудача
• Нет пусто (значение переменной окружения): успех:
• Функция: сохранить переменные среды, и они все равно будут сохранены после перезапуска.
• параметр: никто
• возвращаться:
• 0: успех
• Нет 0: неудача
board/sunxi/sunxi_bootargs.c update_bootargs предоставляет информацию ядру через cmdline, в основном путем обновления переменной bootargs для реализации env_set("bootargs", cmdline).
• Функция: исполнение U-Boot командная строка
• параметр:
• cmd: указатель командного символа
• len: командная длина строки, заданная для-1 затем автоматически получите
• flag: произвольно, потому что sunxi середина не используется
• возвращаться:
• 0: успех
• Нет 0: неудача
common/autoboot.c autoboot_command реализует команду автоматического запуска U-Boot.
s = env_get(“bootcmd”);
run_command_list(s, -1, 0)。
• Функция: Считайте nблок указанной начальной позиции start_block в буфер.
• параметр:
• start_block: начальный адрес
• nblock:block число
• buffer: адрес памяти
• возвращаться:
• 0: успех
• Нет 0: неудача
• Функция: Записать буфер в nblockсередина в указанной начальной позиции start_block.
• параметр:
• start_block: начальный адрес
• nblock:block число
• buffer: адрес памяти
• возвращаться:
• 0: успех
• Нет 0: неудача
• Функция аналогична sunxi_flash_read.
• Функция аналогична sunxi_flash_write.
common/sunxi/board_helper.c sunxi_set_bootcmd_from_mis реализует операции чтения и записи в разделе misc
• Функция: получить номер раздела на основе имени раздела.
• параметр:
• part_name: Имя раздела
• возвращаться:
• <0: неудача
• >0(Номер раздела):успех
• Функция: Согласно Имя разделаполучатьсмещение разделаиразмер
• параметр:
• part_name: Имя раздела
• part_offset: смещение раздела
• part_size: размер раздела
• возвращаться:
• 0: успех
• -1: неудача
• Функция: Согласно Имя разделполучить смещение
• параметр:
• part_name: Имя раздела
• возвращаться:
• <=0 : неудача
• >0 : успех
• Функция: Получить информацию о разделе на основе part_name.
• параметр:
• part_name: Имя раздела
• info: Информация о разделе
• возвращаться:
• Нет 0: неудача
• 0: успех
• Функция: карта sprite Получить смещение в режиме раздела
• параметр:
• part_index: Номер раздела
• возвращаться:
• >=0(компенсировать):успех
• -1: неудача
При запускенагрузкакартинакусок:drivers/video/sunxi/logo_display/sunxi_load_bmp.c
• Функция: В соответствии с путем node_path и gpio Имя prop_name получает gpio Конфигурация
• параметр:
• node_path:fdt путь
• prop_name:gpio имя
• gpio_list: необходимо получить gpio информация
• возвращаться:
• 0:успех
• -1:неудача
• Функция: Согласно gpio Конфигурацияполучать gpio ручка управления
• параметр:
• gpio_list:gpio Конфигурациясписок,Может Зависит отfdt_get_one_gpio получить
• group_count_max: gpio_listсередина самый крупный gpio Конфигурациячисло
• возвращаться:
• 0:неудача
• >0(gpio ручка управления):успех
• Функция: Согласно gpio ручка управлениязаписать данные
• параметр:
• p_handler:gpio ручка управления,Может Зависит отsunxi_gpio_requestПолучить
• value_to_gpio: данные для записи, 0 или 1
• gpio_name:gpio имя
• возвращаться:
• EGPIO_SUCCESS:успех
• EGPIO_FAIL:неудача
Состояние индикатора работы:
ssprite/sprite_led.c
user_gpio_set_t gpio_init;
fdt_get_one_gpio("/soc/card_boot", "sprite_gpio0", &gpio_init); //Получаем gpio Конфигурация /soc/card_bootсерединаспрайт_gpio0
sprite_led_hd = sunxi_gpio_request(&gpio_init, 1); //Получаем gpioручку управления
gpio_write_one_pin_value(sprite_led_hd, sprite_led_status,"sprite_gpio0"); //действоватьledсостояние
• env :Переменные среды доступны после инициализации.
• fdt :существовать U-Boot Доступен сразу после начала операции
• malloc :существоватьдоступен только после переезда