CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Компьютерный форум > Форум Linux

Ответ Создать новую тему
 
Старый 19.01.2012, 12:07   #1
tiger()
Новичок
 
Регистрация: 20.04.2011
Сообщений: 33
Репутация: 1 (1)
По умолчанию как работают bootargs

Как работают bootargs?

Сейчас есть скомпилированное ядро линукса на SD-карте, там хранится файл с bootargs ("setenv bootargs 'console=ttyS0, 115200n8... и т.д."), образ ядра и отдельно ФС.

В bootargs еще определяются значения многих переменных, например:
davinci_enc_mngr.ch0_output=LCD vpfe_capture.interface=1
и т.д.

С чем именно работает этот "скрипт", ведь у нас уже скомпилированное ядро? обязательно ли в исходниках должны встречаться все эти переменные? Дело в том что есть исходники, из которых должен был быть скомпилен данный линукс (который на SD), но в текстах этих переменных нигде не встречается.
tiger() вне форума
Другие темы раздела
На чем программировать в Linux и дистрибутивы.
Добрый день. Решил заняться одноплатными компьютерами. Нашел отличнейший вариант но только на Linux. Появился ряд вопросов: 1)Читал что С++ в линуксе работает, но какой именно компилятор нужен (visual, borland....). Или а во всем ошибаюсь?))) 2)На одноплатник можно установить только Debian,.... На чем программировать в Linux и дистрибутивы.
дистрибутив linux Linux
у меня есть два компа, один для программирования (php javascript html python) второй для тех поддержки сайта (skype icq и т.п) какой дистрибутив подойдёт? установятся ли все драйвера и т.п7 вот такой дистр норм или нет?. дистрибутив linux
Старый 20.01.2012, 02:36   #2
LosAngeles
Форумчанин
 
Аватар для LosAngeles
 
Регистрация: 18.07.2011
Сообщений: 1,208
Записей в блоге: 3
Репутация: 386 (259)
По умолчанию Re: как работают bootargs

Осторожно! Много букв!
LosAngeles вне форума
Старый 23.01.2012, 13:47  [ТС]   #3
tiger()
Новичок
 
Регистрация: 20.04.2011
Сообщений: 33
Репутация: 1 (1)
По умолчанию Re: как работают bootargs

То есть (если я правильно понял) ядро после загрузки считывает все эти параметры так, как из командной строки все последующие команды?
Получается это самые первые команды, которые выполнит ядро.

А откуда он берет эти переменные? Они где-то должны быть описаны ранее?

Если, например, console=ttyS0, 115200n8 поймет любой дистрибутив Linux, то есть специфические команды для конкретного SoC, как Вы думаете, можно ли в сорцах найти правила использования таких команд?
tiger() вне форума
После регистрации реклама в сообщениях будет скрыта
Старый 24.01.2012, 06:26   #4
LosAngeles
Форумчанин
 
Аватар для LosAngeles
 
Регистрация: 18.07.2011
Сообщений: 1,208
Записей в блоге: 3
Репутация: 386 (259)
По умолчанию Re: как работают bootargs

Цитата Сообщение от tiger() Посмотреть сообщение
А откуда он берет эти переменные? Они где-то должны быть описаны ранее?
по разному. До 2.6 всем заправляли макрос
Код C
1
2
3
4
5
6
7
8
9
10
11
12
 
#define __setup(str, fn)                                        \
        __setup_param(str, fn, fn, 0)
 
#define __setup_param(str, unique_id, fn, early)                        \
        static const char __setup_str_##unique_id[] __initconst \
                __aligned(1) = str; \
        static struct kernel_param __setup_##unique_id      \
                __used __section(.init.setup)                   \
                __attribute__((aligned((sizeof(long)))))        \
                = { __setup_str_##unique_id, fn, early }
 
и структура kernel_param(obs_kernel_param +2.6!!!)
Код C
1
2
3
4
5
struct kernel_param {
        const char *str;
        int (*setup_func)(char *);
        //int early; +2.6!!!
};
параметры к которым должно быть готово ядро(ну или которые типа определенны в нём) определялись этим макросом и представляли из себя массив структур(встроенный в gcc маскрос section обязывает его распологать данные в отдельной области памяти друг за дружкой, несмотря на то что макросом пользуются в разных объектных файлах), состоящих из указателя на имя параметра str и на функцию-обработчик(вызывается, если аргумент с именем == *str передан ядру). Но начиная с 2.6 появилось поле early и все параметры разделились на первичные и обычные и обрабатываться в start_kernel они теперь будут уже в два прохода:
Код C
1
2
3
4
parse_early_param();
       parse_args("Booting kernel", static_command_line, __start___param,
                  __stop___param - __start___param,
                  &unknown_bootoption);
kernel_param соответственно переименовали в obs_kernel_param, а сам kernel_param стал таким
Код C
1
2
3
4
5
6
7
8
9
10
11
12
13
 
struct kernel_param {
       const char *name;
       const struct kernel_param_ops *ops;
       u16 perm;
       u16 flags;
       union {
              void *arg;
               const struct kparam_string *str;
               const struct kparam_array *arr;
       };
};
 
Код C
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#define __module_param_call(prefix, name, ops, arg, isbool, perm)       \
        /* Default value instead of permissions? */                     \
        static int __param_perm_check_##name __attribute__((unused)) =  \
        BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2))  \
        + BUILD_BUG_ON_ZERO(sizeof(""prefix) > MAX_PARAM_PREFIX_LEN);   \
        static const char __param_str_##name[] = prefix #name;          \
        static struct kernel_param __moduleparam_const __param_##name   \
        __used                                                          \
    __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \
        = { __param_str_##name, ops, perm, isbool ? KPARAM_ISBOOL : 0,  \
            { arg } }
 
это нововведение связано с реорганизацией LKM

Summary: Вобщем если ты хочешь выискивать свои параметры прямо в сырце, то тебе в первую очередь нужно грепать __setup, early_param и module_param, но на твоём месте я бы лучше прочитал Documentation/kernel-options.txt, там параметры и даже краткое их описание + архитектурно зависимые параметры лежат в файлах в соответсвующих папках
LosAngeles вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
С++ для начинающих If не работают
#include <stdio.h> #include <conio.h> #include <math.h> #include <complex.h> #include <process.h> void main() { int a,label; float n1,x,n,z1,z2,y,y1; start:
A_S_M
Материнские (системные) платы Не работают задние USB а передние работают как по маслу в чем дело.
Здравствуйте.Включил комп и заметил что не работает принтер подумал что отключил от питания а оказалось что не работают задние usb,передние работают как по маслу а задние нет.
Димон4ик-95
Turbo Pascal Почему не работают кнопки сдвига графика не работают.
Мне нужно чтоы при нажатии клавиш "вверх,вниз,вправо,влево" график двигался, тоесть перерисовывался со смещением. Вот есть код, но почему- то не работает ? program gpahif; uses crt,graph; var yso,xso,yss,xss,j,d,m,xs,ys,xs2,ys2,i,x33,y33:integer; x,y,t:real; s,st:string; ...
LeDep
Периферийные устройства Не работают все USB.
Не работают все USB винда их видит, дрова стоят, переустановка винды не помогла, в биосе тоже все включено, при подключении устройства типо флэшка питание на него подается.
M'SiD
ASP.NET ASP страницы работают в IE, но не работают в Netscape.
Napisal kuchu ASP stranits, kotoriye rabotayut klassno v IE, no kogda progonayu ih v Netscape to poluchayutsa sleduyushiye prokoli. 1. kogda pishu v text inpute 'readonly', to IE eto vosprinimayet, a Netscape net. Kak mozhno sdelat tak, chtobi oba rabotali? 2. kogda v knopku stavlu funktsiyu...
iamden
Опции темы

Текущее время: 12:23. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru