Как установить значение глобальной переменной в C для переменной среды оболочки? - PullRequest
0 голосов
/ 28 марта 2019

При переносе U-Boot на определенное оборудование,
функция должна анализировать заголовок, чтобы получить точку входа ОС, чтобы перейти в нее.

Скажем, функция получает точку входа os вглобальная переменная 'C' uint32_t osentry.

Как установить это значение для команды оболочки U-Boot 'go'?

Я вижу команду U-Boot go (shell), должна бытьустановить как go $entry В нескольких примерах я вижу, что запись является фиксированным адресом, установленным в качестве значения среды оболочки.

Принимая во внимание, что для меня это глобальная переменная 'C'.

1 Ответ

0 голосов
/ 29 марта 2019

Как установить значение глобальной переменной в C для переменной среды оболочки?

Используйте функцию env_set_addr () , чтобы установить переменную среды для использования в качествеадрес из обычной программной переменной.
Из include / common.h :

/**
 * env_set_addr - Set an environment variable to an address in hex
 *
 * @varname:    Environment variable to set
 * @addr:   Value to set it to
 * @return 0 if ok, 1 on error
 */

ADDENDUM

По какой-то причине я не смог найти эту функцию в кодовой базе, которую я использую.

Вы не упомянули, какую версию U-Boot вы используете.
env_set () и его друзья, по-видимому, были представлены в версии 2017.09 для замены setenv () и его друзья.

Я использовал аналогичный setenv () после форматирования с помощью sprintf.

Начиная с версии 2011.12, простая setenv () была дополнена setenv_addr () и / или setenv_hex () , чтопреобразует длинное целое без знака в строку шестнадцатеричных цифр для вас.
Если вы все еще используете версию U-Boot старше 2011.12, то вам придется делать то, что вы описываете.

...