18 ноября, 2008

vi основные команды

vi основные команды

Оригинал: .pdf .odt

Перевод: .pdf .odt


Условия распространения Creative Commons Attribution-ShareAlike 2.5 license
©Copyright 2006-2005, Free Electrons.

16 ноября, 2008

Как пропатчить Linux - Linux patch

Делается это очень просто. Допустим, Вы уже имеете исходники ядра, скачанные с kernel.org. Теперь будем накладывать патч на ядро.

Определите нужную версию ядра и патча с помощью браузера на kernel.org.
http://kernel.org/pub/linux/kernel/v2.6/patch­2.6.27.bz2 (с 2.6.26 на 2.6.27)
http://kernel.org/pub/linux/kernel/v2.6/patch­2.6.27.6.bz2 (с 2.6.27 на 2.6.27.6)

Далее скачиваем патч, сверяем подпись:
wget http://kernel.org/pub/linux/kernel/v2.6/patch-­2.6.27.6.bz2
wget http://kernel.org/pub/linux/kernel/v2.6/patch-­2.6.27.6.bz2.sign
gpg ­­--verify patch-­2.6.27.6.bz2.sign

Накладываем патч:
bzcat patch­-2.6.27.6.bz2 | patch ­p1

Патч наложен.
Откатить патч можно с помощью patch с параметром -R.
Файл patch-2.6.27.6 - это вывод комманды diff. Вот так он выглядит:

diff --git a/Makefile b/Makefile
index 16e3fbb..1ea4453 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@ <-номера строк в файле
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 27
-EXTRAVERSION = <- удаленная строку
-NAME = Rotary Wombat <- удаленная строка
+EXTRAVERSION = .6 <- добавленная строка
+NAME = Trembling Tortoise <- добавленная строка

# *DOCUMENTATION*

Спасибо.

15 ноября, 2008

Crosstool - сборка и тестирование Toolchains

Вот такую матрицу-отчет сгенерила crosstool, полная её версия здесь.

Сборка кросс-toolchain'а gcc/glibc для встраеваемых систем есть пэйнфул процесс. Программа (набор скриптов) Crosstool, написанная Dan Kegel, поможет найти рабочие комбинации различных версий gcc, glibc, binutils и заголовочных файлов ядра(см. рисунок выше).
  • Домашняя страница проекта: http://kegel.com/crosstool/
  • Также смотреть: uClibc chaintools http://free-electrons.com/community/tools/uclibc
  • Have fun! http://www.aleph1.co.uk/armlinux/docs/toolchain/toolchHOWTO.pdf

Под ARM:
  • http://www.codesourcery.com/gnu_toolchains/arm/
  • ftp://ftp.handhelds.org/projects/toolchain/
Под MIPS:
  • http://www.linux-mips.org/wiki/Toolchains

Tools list:

  • Crosstool­-ng
  • Buildroot
  • Scratchbox
  • OpenEmbedded
  • PTXdist
  • LTIB
  • Home made tools
  • Firmware Linux
  • Gentoo embedded
  • ELDK
  • другие? коммент.


Спасибо.

02 ноября, 2008

Архитектура ядра UNIX


На диаграмме ниже показаны различные модули ядра и их свзяи. Два главных компонента ядра: файловая подсистема (file subsystem) и подсистема управления процессами (process control subsystem). Также здесь видно три уровня: user, kernel и hardware levels. Интерфейс системных вызовов (system call interface) и библиотеки(libraries) разделяют пользовательский уровень и уровень ядра. Системные вызовы обычно представлены в виде вызовов функций в С программах, библиотеки собирают эти вызовы в примитивы, необходимые для работы ОС.



Блочная диаграмма ядра UNIX

Файловая подсистема управляет файлами, выделяет место под них, управляет свободным пространством, контролирует доступ к файлам, получает данные для пользователей. Процессы взаимодействуют с файловой подсистемой через специфический набор системных вызовов:

  • open открывает файл для чтения и записи
  • close
  • read
  • write
  • stat запрашивает атрибуты файла
  • chown изменяет запись о том, кто владеет файлом
  • chmod управляет доступов к файлу

Файловая подсистема получает доступ к файлам, используя механизм буферизации (buffering mechanism), который устанавливает канал между ядром (kernel) и устройством хранения (storage device). Механизм буферизации взаимодействует с драйвером устройства блочного ввода/вывода (block I/O device) для того, чтобы инициировать перемещение данных в/из ядра. Драйвер устройства - это модуль ядра, который контролирует работу периферийных устройств.
Файловая подсистема также может напрямую взаимодействовать с "сырыми" ("raw") драйверами ввода/вывода без привлечения механизма буферизации. Raw устройства также называют символьными (character). Это все устройства, которые нельзя отнести к блочным.


Подсистема управления процессами


Подсистема управления процессами отвечает за синхронизацию процессов (process synchronization), межпроцессорное взаимодействие (interprocess communication), управление памятью (memory managment) и планировкой процессов (process sheduling). Файловая подсистема и подсистема управления процессами взаимодействуют при загрузке файла в память для его запуска (подсистема процессов прочитывает исполняемый файл в память перед его исполнения).
Некоторые системные вызовы для управления процессами:

  • fork создает новый процесс
  • exec накладывает образ программы на текущий процесс
  • exit заканчивает запущенный процесс
  • wait синхронизирует исполнение процесса с exit предыдущего fork-нутого процесса
  • brk контролирует размер выделенной на процесс памяти
  • signal управляет откликом процесса на экстраординарные события


Модуль управления памятью (memory managment module) управляет выделением памяти. Если системе не хватает физической памяти для всех процессов, ядро перемещает их между основной и вторичной памятью, и так все процессы имеют возможность быть запущенными.

Планировщик (sheduler) выделяет CPU под процессы. Он распределяет запуск процессов пока они добровольно (произвольно) не освободят CPU на/во время ожидания ресурса, либо пока ядро не выгрузит их по истечении кванта времени. После планировщик выбирает процесс с наибольщим приоритетов для его запуска; первичный процесс будет запущен опять тогда, когда он будет являться процессом с наивысшим приоритетом.
Существует несколько видов межпроцессорного взаимодействия, начиная с асинхронной передачи событий (asynchronous signaling of events), заканчивая синхронной передачей сообщений между процессами.


Управление аппаратным обеспечением


И наконец, управление аппаратным обеспечением (hardware control) ответственно за обработку прерываний (handling interrupts) и общения с машиной. Такие устройства как диски или терминалы могут прерывать CPU во время выполнения процесса. В таком случае ядро может продолжить исполнение прерванного процесса после обслуживания прерывания. Прерывания не обслуживаются специальными процессами, а специальными функциями ядра, вызываемыми в контексте текущего запущенного процесса.


Литература:

  • The Design Of the Unix Operating System by Maurice J. Bach, 1986