Я в тупике, и мне нужен кто-то, кто скажет мне, что мне не хватает.
Мне пришлось обновить загрузчик U-boot на моих устройствах, и, естественно, мне пришлось сделать все снова подходит И сейчас я пытаюсь получить доступ к переменным среды U-Boot из Linux / Android.
Короче говоря, я создал файл /etc/fw_env.config
, который указывает на * 1006 U-Boot * раздел в Fla sh. Как описано здесь: https://elinux.org/U-boot_environment_variables_in_linux
Это не удалось, и поэтому я начал добавлять операторы печати в исходный код для отладки моего устройства. Я отследил ошибку до функции get_config()
, которая, как можно себе представить, открывает /etc/fw_env.config
и записывает значения в необходимые переменные.
Я сузил ее до sscanf()
функция, которая возвращает 0, как в 0 переменных, прочитанных и / или записанных. Итак, в качестве проверки работоспособности я изолировал функцию и создал свою собственную маленькую программу отдельно от моего исходного кода (имена переменных и структуры я сохранил точно так же).
/* sscanf example */
#include <stdio.h>
struct envdev_s {
const char *devname; /* Device name */
long long devoff; /* Device offset */
unsigned long env_size; /* environment size */
unsigned long erase_size; /* device erase size */
unsigned long env_sectors; /* number of environment sectors */
unsigned int mtd_type; /* type of the MTD device */
};
static struct envdev_s envdevices[2] = {};
#define DEVNAME(i) envdevices[(i)].devname
#define DEVOFFSET(i) envdevices[(i)].devoff
#define ENVSIZE(i) envdevices[(i)].env_size
#define DEVESIZE(i) envdevices[(i)].erase_size
#define ENVSECTORS(i) envdevices[(i)].env_sectors
#define DEVTYPE(i) envdevices[(i)].mtd_type
int main ()
{
char dump [] = "/dev/mtd1 0xc0000 0x2000 0x2000\n";
char *devname;
int i = 0;
int rc;
printf("I was here in get_config : dump = %s\n", dump);
printf("I was here in get_config : i = %d\n", i);
rc = sscanf(dump, "%ms %lli %lx %lx %lx",
&devname,
&DEVOFFSET(i),
&ENVSIZE(i),
&DEVESIZE(i),
&ENVSECTORS(i));
printf("I was here in get_config : rc = %d\n", rc);
return 0;
}
Также воссоздал здесь: http://cpp.sh/5ckms
Теперь, когда я запускаю это независимо, оно работает так, как я ожидаю, в частности, выводя:
I was here in get_config : rc = 4
4 успешно, как char dump [] = "/dev/mtd1 0xc0000 0x2000 0x2000\n";
Но когда Я компилирую это и запускаю на моем устройстве, оно возвращает:
I was here in get_config : rc = 0
Компьютер говорит НЕТ! И никаких других сообщений об ошибках, чтобы работать с ними.
Я, очевидно, здесь не хватает фундаментального понимания. Либо какие-то разрешения, либо какие-то переменные установки где-то, но я не знаю, с чего начать. Может ли кто-нибудь указать мне правильное направление?