18 ноября, 2008
vi основные команды
Оригинал: .pdf .odt
Перевод: .pdf .odt
Условия распространения Creative Commons Attribution-ShareAlike 2.5 license
©Copyright 2006-2005, Free Electrons.
16 ноября, 2008
Как пропатчить Linux - Linux patch
Определите нужную версию ядра и патча с помощью браузера на kernel.org.
http://kernel.org/pub/linux/kernel/v2.6/patch2.6.27.bz2 (с 2.6.26 на 2.6.27)
http://kernel.org/pub/linux/kernel/v2.6/patch2.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
Сборка кросс-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/
- 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