Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
14.76 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

Click

 

BUY

>>m

w

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

а.

unixoid

б. в.

 

50

 

 

 

 

 

 

 

50

 

 

 

 

 

 

 

 

94

 

 

RAM

Flash

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

40

 

 

 

 

 

 

 

40

 

 

 

 

 

 

 

 

64

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

30

 

 

 

 

 

 

 

30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20

 

 

 

 

 

 

 

20

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AXFS

 

JFFS2

 

CRAMFS SQUASHFS

 

AXFS

 

SQUASHFS XIP AXFS XIP CRAMFS

 

JFFS2

 

SQUASHFS

AXFS

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

БЕНЧМАРКИAXFS: СКОРОСТЬЗАПУСКАПРИЛОЖЕНИЯ(А), РАЗМЕРОБРАЗАФС(Б), ОБЩИЙУРОВЕНЬПОТРЕБЛЕНИЯПАМЯТИ(СООТНОШЕНИЕRAM/FLASH) (В)

ЕВГЕНИЙ «J1M» ЗОБНИН

/ ZOBNIN@GMAIL.COM/

Обреченные на успех

Обзор самых интересных проектов, представленных на UNIX-конференциях

Ежегодно по всему миру проходит множество конференций, так или иначе связанных с UNIX и FOSS. Участие IT-специалиста в программе одной из них

— отличный способ выделиться, продемонстрировать неординарность своего мышления и умение излагать мысли. Мы ознакомимся с пятью наиболее креативными проектами, представленными на конференциях USENIX и Linux Symposium за последние два года.

>> unixoid

KORSET—HIDSБЕЗЛОЖНЫХСРАБАТЫВАНИЙ

ФеноменальнаяпопулярностьнебезопасныхязыковпрограммированияC иC++ оказаласьфатальнойспоявлениеминтернетаисетевых технологий. Проблемесрывастекаужесвыше25 лет, ноэффективного еерешениядосихпорнепридумано. Производителижелезаснабжают процессорыNX-битом, который, какоказалось, способеностановить толькоучителейинформатики. Воперационныесистемывстраиваютразнообразныерандомизаторыадресов, — онихотьиусложняют процессвнедренияshell-кода, нотакжелегкообходятся. Создатели

компиляторовнеотстаютипридумываютпрополисыипрочиерасширения. Идеалистыпостояннокричатотипо-безопасныхязыкахивиртуаль- ныхмашинах. Каждыйгодисследователипредставляютновыесистемы защиты, ноявногопрогрессанетикажется, чтоэффективноерешениене будетнайденоникогда.

Нескольковсторонеотвсейэтойкутерьмыстоятразработчикихостовых системобнаружениявторжений(HIDS). Онипредлагаютискатьлекарство неотсамойболезни, аотеесимптомов: разужотсрывастекаисмежных методовпроникновениязащититьсянельзя, топочемубынепресечьих последствия, запретивпрограммеделатьто, чегоонаделатьнедолжна.

СуществуетдватипаHIDS: обучаемыеиоснованныенаправилах. Слабость первых в необходимости предварительного «прогона» приложения, — обучаемойHIDS нужновремянаанализтого, чтообычно делаетприложение, чтобыужепотомнаосновеэтихданныхограничить софтинуввозможностях. ВтожевремятакаяHIDS простотехническине способнаузнатьобовсем, чтоможетприложение, идовольночастодает ложныесрабатывания.

HIDS, основанныенаправилах, действуютпо-другому. Онипредлагают пользователюсамомусоставитьсписоктого, чтодозволеноприложению (какиесистемныевызовыразрешены, ккакимфайламиустройствамоно можетобращатьсяит.д.), авсеостальныедействиябудутпресекаться.

Недостаток: чтобыточносоставитьправила, нужносерьезнопопотеть (попробуйкак-нибудьнадосугенаписатьсписокправилSELinux для Apache ивсехегомодулейснуля).

РазработчикиконцептуальнойHIDS Korset (www.korset.org), анонсированнойнаLinux Symposium 2008, предложилиобъединитьобатипа системобнаружениявторженийдлясозданиясверхнадежнойHIDS, работающейбезвмешательствапользователяинетребующейобучения илинаписанияправил. Korset базируетсянаидееControl Flow Graph

080

XÀÊÅÐ 04 /124/ 09

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ПРИНЦИПРАБОТЫKORSET

User Space

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

System Calls

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

example c

 

 

 

 

 

 

 

 

example

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=read(fd, buf, n);

 

 

 

 

gcc, ld, ...

 

 

 

 

ELF

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if (i==n) {

 

 

 

 

 

 

 

 

 

executable

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

write(fd, buf, n);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

close(fd);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Korset Static Analyzer

ГРАФИЧЕСКОЕПРЕДСТАВЛЕНИЕ ГРАФАФУНКЦИИFWRITE()

 

 

 

 

 

 

Kernel Space

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Korset

 

 

 

 

Kernel

 

 

Monitoring

 

 

 

 

System Call

 

 

 

 

 

 

 

 

Agent

 

 

 

 

Handler

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

read

write

close

example. korset

1)syscall90

2)fwrite()

3)ryscall140

4)syscall91

5)syscall125

6)syscall+5

7)syscall4

8)syscall197

9)syscall10S

10)syscall54

АДРЕСНОЕПРОСТРАНСТВОПРОЦЕССА, РАБОТАЮЩЕГОПОДКОНТРОЛЕМVX32

Host Operating System

Kernel Address Space

(x86-32 or x86-64)

Host Application

Address Space

(x86-32 or x86-64)

(quest address space expands as heap grows)

Flat Model

Code, Data quest heap Segments

quest code, data, bss

default quest stack

Guest Address Space

(always x86-32)

quest execution state, code tragment cache

vx32 sandbox library

Host Application code, data, bss, heap (x86-32 or x86-64)

0

1

8

10

 

 

6

9

 

 

3

7

 

 

 

 

5

 

2

4

ДИСКОВЫЙФОРМАТAXFS

SUPERBLOCK

Guest

Data Region Descriptor

Segment

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Region Descriptor

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Region Descriptor

 

 

 

 

 

 

 

 

 

 

 

 

 

Guest

 

 

 

 

 

 

 

 

 

 

 

 

 

Control

 

 

Region Descriptor

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Segment

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Region - file names

Region - node offsets

Region - compressed nodes

Region - xip nodes

XÀÊÅÐ 04 /124/ 09

081

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

BUY

>>m

 

w

Click

to

 

 

 

 

unixoid

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

(CFG), которыйпредставляетсобойграф, отражающийочередность выполнениясистемныхвызововприложением. Такойграфстроится автоматическивовремясборкиприложенияизагружаетсяядромперед егоисполнением. Есливовремяработыпроцессинициируетсистемные вызовы, неописанныевграфе, илидажеделаетихневтомпорядке— процессзавершается.

Чтобывоплотитьмысльвреальность, создателиKorset снабдилиGNU build tools (gcc, ld, as, ar) специальнымиобертками, которыестроят CFG наосновеисходныхтекстовиобъектныхфайловприложения. Для реализациисидящеговядреMonitoring Agent былмодифицированELFзагрузчик, которыйвовремязагрузкиисполняемогофайлавпамятьнаходитизагружаетзакрепленныйзанимCFG (файлприложение.korset).

Специальнаяхук-функцияsecurity_system_call, прописаннаявструктуре security_operations, запускаетсяприкаждомсистемномвызовеисверяет егосзаписьювCFG. Ну, ачтобысвязатьвсеэтовоедино, вструктуру task_struct добавилиссылкунаCFG иегосостояние.

На первый взгляд, Korset прост в реализации и удобен в использовании. Но не все так радужно. Во-первых, CFG убивает возможность генерации кода на лету, без которой в некоторых случаях просто не обойтись. Во-вторых, CFG — не панацея. Если взломщик умудрится оформить системные вызовы shell-кода таким образом, чтобы они соответствовали прописанным в CFG (например, сделает open(),

но не конфигурационного файла, а псевдотерминала), то ничто не помешает ему в проникновении. Ну и, в-третьих, в текущем состоянии Korset далек от продакшн: работа только на x86, с программами без динамической линковки, многопоточности, сигналов и инструкций вроде setjmp и longjmp.

VX32 — ПЕСОЧНИЦАВПРОСТРАНСТВЕПОЛЬЗОВАТЕЛЯ

Идеяиспользоватьпесочницыдлязапусканебезопасногокодадалеко ненова. Близкиепримеры: Chroot, FreeBSD Jail, Linux Lguest, Solaris Zones. JavaVM — тожесвоегородапесочница, принуждающаяисполь- зоватьтипо-безопасныйязыкдлясозданияприложенийиприменяю- щаямногочисленныерантаймпроверкинабезопасность. ДажеVMWare

иqemu естьнечтоиное, какпесочницы, позволяющиезапуститьОСв изолированномвиртуальномокружении.

Особоговниманиязаслуживаютпесочницы, основанныенапрозрачной трансляцииопкодовx86. Чтобыпонять, чтоэтотакое, представьсебе Java, котораяумеетисполнятьобычныйx86-код, скомпилированный

спомощьюgcc. Приэтомподконтрольнаяпрограмманеможетвыйти заграницысвоейобластипамятиинавредитьработевиртуальной машины. Единственныйпутьнаружу— специальныйAPI. Ничегокроме длянеенесуществует. Такойвидпесочницнаиболееинтересен, потому какнетребуетвмешательстввядро, непринуждаеткиспользованию типо-безопасныхязыков, транслируемыхвбайт-код, неэмулируетцелую аппаратнуюплатформуипозволяеткакугодноограничитьисполняемую программуспомощьюурезанияAPI доминимума. Наегоосноведаже можнопостроитьцелуюоперационнуюсистему, работающуювпространствепользователя.

Ксожалению, популярноститакойтиппесочницнеполучил. Реализация требуетсофтвернойинтерпретацииинструкцийпроцессора(сцельюих модификации), ведьчтобыподконтрольноеприложениеоставалосьв изоляции, нельзядопустить, чтобыоносмоглопроизводитьсистемные вызовыилиобращатьсякфункциям, неоговореннымвAPI (инструкции int иcall). Нельзяпередаватьуправлениенакодзапределамисвоегоадресногопространства(jmp) иличитатьданныевнесвоейзонывидимости (тутужсовсемзасада). Поэтомуинструкциидолжныанализироваться

ипринеобходимостиисправляться. Какследствие: напорядкиотстает производительность.

Проект Vx32 (pdos.csail.mit.edu/~baford/vm), представленный на конференции USENIX’08, вдохнул в идею подобных песочниц новую жизнь благодаря одному хитрому приему, который позволил вывести производительность чуть ли не на уровень нэйтивного кода. Все дело в границах области данных. Обычно для ограничения области данных подконтрольной программы интерпретаторы анализируют все куски кода, содержащие хоть какое-то упоминание об адресе,

будь то чтение из буфера, работа со стеком или обращение к файлу. Анализируется и, в случае необходимости, исправляется каждая инструкция, несущая в себе адрес. В то же время на долю различных переходов и обращений к подпрограммам остается жалкий процент действий, не несущий особой нагрузки на интерпретатор. Разработчики Vx32, отлично это понимая, просто ограничили область данных программы сегментными регистрами (ds, es, ss), которые все равно не применяются в современных ОС из-за плоской модели памяти. В результате, интерпретатор Vx32 должен заботиться только об анализе инструкций-переходов (число которых очень мало: jmp и производные, call, int, ret) и пресекать попытки изменения сегментных регистров, а самую трудоемкую работу по соблюдению границ видимости области данных выполнит процессор, который делает это в сотни раз быстрее. Уже сейчас Vx32 стабильноработает, анаего основесозданонесколькопроектов, средикоторыхОСPlan9, работаю- щаяврежимехост-системы, и«эмулятор» Linux (Linux API поверхVx32). Производительностьэтихсистемприближаетсякнэйтивномукоду (оверхедредкопревышает80%). Недостатокжеусистемывсегоодин: привязанностькx86.

KVMFS—УДАЛЕННОЕУПРАВЛЕНИЕ ВИРТУАЛЬНЫМИСЕРВЕРАМИ

Технологиивиртуализацииплотновошливнашужизнь. Разработчики используютвиртуальныемашиныдляпрогонкииотладкинизкоуровнегокода, администраторы— чтобысэкономитьнапокупкежелезных

ВИРТУАЛИЗАЦИЯ ПРИМЕНЯЕТСЯВКЛАСТЕРАХ ПОВЫШЕННОЙ ПРОИЗВОДИТЕЛЬНОСТИ(HPC) ДЛЯЭФФЕКТИВНОГО ИСПОЛЬЗОВАНИЯВСЕХЯДЕР СОВРЕМЕННЫХМНОГОЯДЕРНЫХПРОЦЕССОРОВ.

серверов, ахостерыначалиприменятьтехнологиивиртуализациис цельюсоздатьиллюзиюпостояннойдоступностисервера. Особенно полюбилисьвиртуальныесерверасервисампосдачеварендукомпьютерныхмощностей(теперьдлякаждогоклиентаонимогутвыделить отдельныйвиртуальныйсерверипринеобходимостиперенестиегона другуюмашину). Виртуализацияприменяетсявкластерахповышенной производительности(HPC) дляэффективногоиспользованиявсехядер современныхмногоядерныхпроцессоров(длякаждогоядра— отдельная виртуальнаямашина).

Бумпопулярностивиртуализацииначалсясразупослепоявленияее поддержкивсовременныхx86-процессорах. Теперьвиртуальныйсервер можетработатьбезявногооверхедаимодификациипрактическина любойОС, оснащеннойсоответствующимдрайвером.

ВLinux такойдрайверназываетсяkvm, идляегозадействованияобычно применяетсявиртуальнаямашинаqemu. Самапосебеqemu представляет множествоинтересныхвозможностейдляуправлениясерверами, включаяфункциизаморозки/разморозки, простойспособмиграциипоСети, поддержкусжатыхобразовдисковит.д. Управлятьсерверомспомощью qemu одноудовольствие, ноеслитакихсерверовсотни, атоитысячи, ивсе ониразбросаныпомножествумашин, начинаютсясерьезныепроблемы. Проект KvmFS, представленный на Linux Symposium 2007, как раз и призван упростить процесс администрирования множества уда-

082

XÀÊÅÐ 04 /124/ 09

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ленных виртуальных машин. KvmFS использует протокол 9P (тот, что из Plan9) для создания виртуальной файловой системы, которую можно удаленно монтировать, например из Linux, и управлять множеством инстанций qemu на удаленном сервере путем записи специальных команд в файлы. Сервер KvmFS прочитает команды и отправит их нужному процессу qemu. Для наглядности далее приводится пример запуска виртуальной машины на сервере host. org:

#mount -t 9p host.org /mnt/9

#cd /mnt/9

#tail -f clone &

#cd 0

#cp ~/disk.img fs/disk.img

#cp ~/vmstate fs/vmstate

#echo dev hda disk.img > ctl

#echo net 0 00:11:22:33:44:55 > ctl

#echo power on freeze > ctl

#echo loadvm vmstate > ctl

#echo unfreeze > ctl

Авоттакпроизводитсямиграциявиртуальногосерверанадругуюмашину:

#mount -t 9p host1.org /mnt/9/1

#mount -t 9p host2.org /mnt/9/2

#tail -f /mnt/9/2/clone &

#cd /mnt/9/1/0

#echo freeze > ctl

#echo 'clone 0 host2.org!7777/0' > ctl

#echo power off > ctl

Дажееслимашинсвиртуальнымисерверамивсетисотни, несоставит особоготруданаписатьнебольшойскрипт, которыйпроходитпосписку адресовимонтируетихвсекнужнымточкам.

AXFS — ЗАПУСКПРИЛОЖЕНИЙБЕЗПОМЕЩЕНИЯВRAM

Linux стремительнозавоевываетрынокмобильнойивстраиваемой техники. ВсебольшепроизводителейсмартфоновзаявляютобиспользованииоткрытойОСвследующихмоделяхсвоихустройств. Множествокомпанийвыдвигаютнарынокспециальныеверсиидистрибутивов Linux длямобильныхустройств. ЛинусТорвальдспропускаетвядро огромноеколичествопатчейсреализациейподдержкитогоилииного мобильногооборудованияикажется, чтохакерскийрайужетакблизко… Ксожалению, невсетакпросто. ИзначальноядроLinux разрабатывалосьдлярабочихстанцийисерверов, итолькосовсемнедавнотукс потянулкрылышкиксмартфонам. Поэтомупочтивсеподсистемыядра рассчитаны(иоптимизированы) наприменениевстандартныхнастольныхконфигурациях, которыенепременнообладаютжесткимидисками, быстрымвидеоадаптером, большимобъемомоперативнойпамятии весьманескромнойпроизводительностью. Некоторыеизэтихпроблем решаютсядостаточнопросто. Например, требуемыеобъемыпамятиможнопонизитьдоприемлемогоуровня, собравядросподдержкойтолько самогонеобходимогоипотюнивсистемучерез/proc. Низкопроизводительнаявидеоподсистема? Ну, тогдаитяжелыйX Server ненужен, хватит framebuffer’а! Авотсостальнымсложнее. Вчастности, вядредосихпор нетфайловойсистемы, позволяющейиспользоватьвсевозможности современныхflash-накопителей.

Списокфич, которымидолжнаобладатьтакаяфайловаясистема, следующий:

1.Переписываниеданныхтольковслучаекрайнейнеобходимости. Основанныенаflash-памятинакопителиимеютограничениепочасти количествацикловперезаписи.

2.Прозрачноесжатиеданных.

3.Умениеработатьбезуровняэмуляцииблочногоустройства, который создаетсовершенноненужныйоверхед.

XÀÊÅÐ 04 /124/ 09

4.Устойчивостькперебоямпитания.

5.ПоддержкаXIP (eXecute-In-Place), т.е. возможностизапуститьпрограм- мупрямосflash-накопителя, беззагрузкивоперативнуюпамять.

Давноинтегрированнаявядроjffs2 неподдерживаетиполовиныэтих возможностей, авотсозданнаякомпаниейNokia ubifs (интегрирована

вядро2.6.27) оченьхорошаиумеетпочтивсе, кромепятогопункта. За счетXIP можносделатьбольшойшагвперед. Поясню. Намобильных устройствахоперационнаясистемаобычнопрошиваетсявпамятьтипа NOR, которая, вотличиеотиспользуемойвофлешкахNAND-памяти, поддерживаетобращениекпроизвольнымячейкам. Произвольный доступделаетееоченьпохожейнаоперативнуюпамятьидажепозволяет использоватьвэтомкачестве. Надотольконаучитьфайловуюсистему мапитьотдельныеучасткиNOR-памятивпамятьвиртуальную — и, о чудо, полноценнаяоперационнаясистемаможетработать, непотребляя

RAM.

ЗагвоздкасXIP лишьвтом, чтоэтотехнологияникакневписываетсявдизайнуниверсальнойоперационнойсистемы. Посутиэтохак,

которыйпытаетсясмешатьнесовместимыеподсистемыядра. Создатели файловойсистемыAXFS (Advanced XIP File System), анонсированнойна Linux Symposium 2008, попыталисьисправитьэтотнедочетприпомощи официальныхмеханизмовядра. Ещевядро2.6.13, врамкахинтегра- цииdcss-драйверадляархитектурыs390, былдобавленспециальный механизм, позволяющийобращатьсякпамятиflash-дисканапрямую (файл/mm/filemap_xip.c). ДосоздателейAXFS этотмеханизмпопыта- лисьиспользоватьразработчикиxip-патчейдляcramfs, новрезультате получилигрязныйхак, которыйникакнельзябыловыдатьзаоптимальноерешение. РазработчикижеAXFS проконсультировалисьсавторами подсистемывиртуальнойпамятиисоздали64-битнуюфайловуюсистему, достоинствакоторой:

1.XIP дляпамятиNOR-типа.

2.ВозможностьработатьсNAND-памятью(XIP автоматическиотключается).

3.Прозрачнаякомпрессиясразмеромблокаот4 Кбдо4 Гб.

4.Умениеработатькаксблочнымиустройствами, такинапрямую. Записыватьонанеумеет(образфайловойсистемысоздаетсяспециальнойутилитой), ноэтоинетребуетсядляпрошивок, выпускаемых производителемаппарата.

LIBFERRIS —НОВЫЙУРОВЕНЬВИРТУАЛЬНЫХФС

Впоследнеевремявиртуальныефайловыесистемызавоевалиособую популярность. Пользователейонипривлекаютсвоейуниверсальностью, благодарякоторойненужнотратитьвремянаизучениеновых интерфейсовичтениемануалов. Сточкизренияпрограммистов, виртуальнаяФС— оченьудобныйипростойспособсвязываниякомпонентовбольшойсистемыбезвыдумыванияновогоAPI ииспользованиясложныхRPC.

Чтобынебытьголословным, приведулишьнекоторыепримеры изгромадногоспискатакихФС: подсистемаGnome VFS, которая

позволяет«ходить»поархивам, ssh-сессиям, ISO-образам; подсистема KDE KIO, разработаннаядлятехжецелей; ядерныймодульfuse, наосновекоторогосозданопростогигантскоеколичествосамыхразнообразных файловыхсистем. Аеслиужмыслитьвболееглобальныхмасштабах, то необойтисьбезупоминанияобоперационныхсистемахInferno иPlan9, гдевиртуальныеФСявляютсяцентральнойчастьюОСисвязываютвсе компонентысистемывединыйкомплекс.

Проект libferris (www.libferris.com), которому была посвящена одна из лекций Linux Symposium, в этом плане идет еще дальше. Кроме возможности монтирования массы разнообразных ресурсов, он предлагает механизм управления приложением (Firefox, X Window) через файловый интерфейс, позволяет легко преобразовать XML-документ в файловую систему и обратно, поддерживает атрибуты, которые на лету извлекаются из внутренних метаданных документа, и обладает еще массой интересных особенностей. Другими словами, проект libferris выводит виртуальные ФС на новый уровень, который раньше был доступен лишь в упомянутом

Plan9. z

083

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

unixoid

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

DIVER

/ DIVER@EDU.IOFFE.RU /

Встраиваем

пингвина

Учимся ставить Linux на микроконтроллеры

Открытость и гибкость GNU/Linux позволяет заточить ее буквально под что угодно. Эта ОС одинаково хорошо работает на маршрутизаторах, мобильниках и профессиональных системах сбора данных – в общем, на так называемых встраиваемых устройствах. Как этого добиваются?

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

>> unixoid

Итак, утебяестьИдея, извучитонатак: «ХочуLinux наМикроконтролле-

ре». КакипочтилюбуюзамечательнуюИдею, еепридумалиещедотебя иужедоскональнопроработалиопытныелинуксоидыипрограммисты. Дляначалаопределисьсзадачей. Чтотвоеустройствобудетделать?

Какбудетреагироватьнавнешниераздражители? Задайсебеглавный вопрос: ЗАЧЕМтебездесьLinux? Еслиопределился, выбирайдевайс, накоторыйтвояОСьбудетводружаться. НанемдолженбытьподдерживаемыйLinux’оммикроконтроллер, атакжедостаточнопамятии быстродействиядлятвоихзадач. Видеале, дляпервыхэкспериментов подойдеткакой-нибудьпростенькийроутер(типаD-Link наMIPS-ар- хитектуре, сужепредустановленнымLinux’ом). Перекомпильядропод своюзадачуизалейобратнонароутер, — этоибудетпервыйопыт. Дальшеможешьспаятьиликупитькакую-нибудьотладочнуюплату. Толькоследи, чтобынатвоемодноплатникебылонеменее16 Мбоперативки, иконтроллеримелБлокУправленияПамятьюMMU (смотриврезку), иначепридетсядовольствоватьсясильноурезаннымядромucLinux. Какзапустишьядроипримонтируешьфайловуюсистему, пишиилиищи драйверадляинтерфейсовивнешнейпериферии.

Обобщим. Дляболее-менееуспешнойреализацииИдеи, тебенадо:

Знатьосновымикроэлектроники.

ЗнатьязыкС(желательноАсм).

УметьориентироватьсявDatasheets ипрочейдокументациикконтроллеруиеговнешнейпериферии.

ИметьопытпрограммированияМК(базовыезнанияпроцессазагрузки Linux такжебудутнелишними).

Звучитстрашно? Ноосновыярасскажуздесь, аостальноепрочитаешьв Сети, еслизаинтересует.

НИЗКИЙУРОВЕНЬ

Улюбогомикроконтроллеранакристалле, помимособственноядра, живетпериферия. Посути, этоотдельныеустройства, объединенныев одинкорпус.

Ядроуправляетвсейвнутреннейперифериейпутемзаписииличтения изрегистров, замапленныхвспециальнуюобластьпамяти. ОниназываютсяSFR (Special Function Register). Запомниэтуаббревиатуру, вдокументациикпроцессорамоначастоиспользуется. Асамопроцессорное

ядро, кромеарифметикидачтения/записивпамять, посути, ничегоине умеетивсеперекладываетнаплечипериферии.

ВнашейзадачеустановкиLinux контроллеробязательнодолжениметь двапериферийныхустройства:

1.PDC — контроллерпрямогодоступакпамяти. Вместотогочтобы «вручную» приниматьданныеспортовввода-выводаикопироватьихв оперативнуюпамять, процессорноеядроможетотдатьэтуоперациюна откупконтроллеруDMA (прямогодоступакпамяти), и, покатотперемещаетданные, заниматьсядействительнополезнымделом. Поокончанииоперацийспамятью, PDC дергаетпрерывание, иядропереключаетсянаобработкуданных.

2.Memory Management Unit (или, по-русски, БлокУправленияПамятью). РаботаетвтандемесPDC иконтроллеромоперативки. Главнаяегороль

— этотрансляциявиртуальнойпамятивфизическую, атакжеконтроль доступа. Натвоемдесктопеархитектурых86/х86-64 онприсутствует всегда, авотвмикроконтроллерахегоможетинебыть. Linux, какмногозадачнаясистема, используетэтотблокдляустановкиправдоступа настраницыпамяти. Кактолькокакой-нибудькодпопытаетсявзаимо- действоватьсзапрещеннойобластьюпамяти, сработаетаппаратное прерывание, обрабатываемоеядромLinux.

ТакжепригодятсяконтроллерыкарточекNAND-Flash иCompactFlash, ноони, наверняка, присутствуютвезде, гдеестьMMU. Остальнуюперифериютоженеследуетобделятьвниманием— например, периферийныйконтроллермикросхемыфизическогоуровняEthernet иподдержка USB-Host дадуттебенехилыепреимуществаввозможностях.

Какизвестно, процессзагрузкиОСнабазеLinux, внезависимостиот архитектуры, происходитвнесколькоэтапов. Вкратценапомню: при стартекомпьютерапервымзапускаетсязагрузчик, подготавливающий всенеобходимоедлязапускаядра— конфигурируетконтроллерпамяти, последовательныйпорт, стекишину, распаковываетвременныйобраз корневогоразделавпамять. Посленизкоуровневойнастройкижелеза загрузчикдолженнайти, скопироватьвпамятьизапуститьнепосредственноядроснужнымипараметрамикоманднойстрокииокружением. В «больших» компьютерахтипаIBM-PC первуючастьзагрузкивыполняет BIOS, авторуюберетнасебязагрузчиктипаGRUB илиLILO.

СледомстартуетядроLinux — распаковываетсебя, определяетокружа-

084

XÀÊÅÐ 04 /124/ 09

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

unixoidw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

КартавиртуальнойпамятивAT91SAM9

ющеежелезо, инициализируетпрерывания, запускаетпроцессИнити подцепляеткорневуюфайловуюсистему. Последняяможетиметьвид сжатогоРАМ-дискаибытьраспакованнойвпамятьещезагрузчиком (илижесразумонтироватьсянафлеш-диске, еслиимеетдрайверадля доступакнемувнутриядра).

Далее, процессомИнитсготовойкорневойФС, стартуютсяужедругие процессы, ивыполняютсястартовыескрипты. Вскореутебянаустройстве— рабочаясистема.

Естественно, загрузившись, ядрунадобудетвыполнятьсвоипрямые обязанности, делатьто, радичегосистемаиставилась(например, собиратькакие-нибудьданныеобокружающеммиреипоказыватьих наэкранепотребованию, поступившемусклавиатуры). Дляобщенияс перифериейнужныдрайвера, которымвзятьсявядренеоткуда. Значит, следующаязадача— найтиилинаписатьих.

ЧТОНУЖНОСОСТОРОНЫСТАРШЕГОБРАТА

Дляначала— компиляторыдлясборкисофтаподустройство. Понятно, чтонужныGNU’тыеGCC иtoolchain, ибоонивходятвофициальный инструментарийкомпиляцииЛинукса, иименноподнимионскомпилируетсябезпроблем. «Обыкновенные» GNU C компиляторыпод х86-юархитектурунеподойдут, таккакархитектураконтроллеравтвоем embedded-устройстве, полагаю, любаядругая, нотольконех86-я. Поэ- томупридетсякачатькросс-компиляторы. ДляARM7/9/11 это, например, GNUARM (www.gnuarm.com), дляAVR — GNU AVR (естьврепозитории Дебиана, пакетgcc-avr), нуадлясовсеммаленькихустройствтипа архитектурыС51 — SDCC (хотятудаядроLinux ужебудетпроблематично засунуть).

Длясозданияобразовфайловыхсистемнамподойдутстандартные утилитытипаmkfs.(что_угодно), gzip иcpio. Здесьпроблемвозникнутьне должно. Теперьпоповодужелеза. Во-первых, незабывайпромощный отладочныйинтерфейсJTAG, которыйестьнабортуукаждогоуважающегосебяконтроллера. Снимзаливкаиотладкасофтастановятся вообщесказкой. JTAG-отладчикдляLPT-портаможнособратьсамосто-

ятельно(смотри, кпримеру, схему— www.diygadget.com/store/building- simple-jtag-cable/info_12.html) иликупитьготовый. Софтаподинтерфейс JTSG завались, итамужевыбирайподнужнуютебезадачу.

ЯдроLinux призагрузкеоченьлюбитплеватьсясообщениямина отладочныйинтерфейс(DBGU) контроллера. Естественно, нампервое времянадобудетобщатьсясLinux’омиискатьошибкинапрямую. Для этогозагрузчикомзаранееконфигурируетсяDBGU-интерфейс, который

представляетсобойобыкновенныйRS-232 порт, ккоторомуприсоединя- ютсяспомощьюкабелядляCOM-порта(надеюсь, COM-разъемутебяна отладочнойплатераспаян).

Взявкакой-нибудьэмулятортерминала, типаcu илиckermit, иподклю-

Виртуальная

память

MMU создает абстрактный слой между реальной, «железной» памятью и так называемой виртуальной адресацией, к которому, в итоге, и обращается процессорное ядро. Пример: загрузчик микроконтроллера AT91SAM9 может жить в двух разных местах

в микросхемах Dataflash и NANDFlash. При включении питания встроенный SAM-BA Boot запускается из внутренней ROM контроллера. В этот момент внутренняя read-only память «находится» по адресу 0x00, поэтому ядро честно начинает выполнять код, записанный там. Заметь, ядро универсально и ничего не знает про окружающую его периферию. Оно тупо и наивно начинает выполнять программу, находящуюся по нулевому адресу. SAM-BA

примитивный загрузчик, он может только опросить по очереди Dataflash и NANDFlash и скопировать первые 4 Кб найденного кода во внутреннюю оперативную память SRAM микроконтроллера. После копирования SAM-BA исполняет особую процессорную операцию, и адрес 0x00 уже указывает на внутреннюю статическую память. Далее 4-килобайтный загрузчик может скопировать основной код из оставшегося объема Flash-карты в оперативную память SDRAM, после чего нулевой адрес виртуальной памяти будет уже указывать в начало оперативки, и начнется нормальная загрузка. Такое вот прыгание нулевого адреса, про которое ничего не обязано знать ядро ARM. Впроцессеработытот жеконтроллерMMUпроецируетвсемикросхемыпамяти,висящие нашинеExternalBusInterface,вблоки256Мбкаждый,имыужепочти можемнезадумыватьсяореальномместонахождениинашихданных. Все«прозрачно»иводномпространстве.В верхнюю область памяти (4 Гб) обычно мапятся адреса регистров для управления периферией. Это — стандартная фишка всех микроконтроллеров.

XÀÊÅÐ 04 /124/ 09

085

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

unixoid

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ОбластьпримененияSoekris net5501: маршрутизаторы, VPN-концентра- торыиточкидоступа

чившиськустройствучерезCOM-порт, тысможешьнизкоуровневонаблюдатьзапроцессомзагрузкииотсылатькомандызагрузчикуиядру. В общем, этотвойпервыйтерминал, когдаLinux наустройствеещеничего незнаетниокакойпериферииввода-вывода.

НевсеконтроллерыумеютбеззагрузчикашитьсяпоUSB, многимдля этоготребуютсяспецпротоколы, скажем, C2 илиActiveSerial. Протвое устройство, какипроспособегозагрузки, яничегонезнаю, поэтому— маршнасайтпроизводителяизучатьспособыпрошивкисвоего отдельновзятогоМК. Возможно, тебепридетсядокупитьилидопаять какой-нибудьпростенькийшнурок.

ЧТО, КУДАИКАКЗАЛИВАТЬ

Загрузчик, запакованноеядроиФСссофтомнадогде-тохранить. Чаще всего, загрузчикзаливаютвнабортнуюфлеш-памятьмикроконтролле- ра, авсеостальноележитвраспаяннойрядомNAND-памяти.

Собранныйсофт(внашемслучае— этоядроLinux иобразФС) нужно залитьвэнергонезависимуюпамятьтвоейплаты. Способцеликоми полностьюзависитотархитектурыипериферииустройства, такчто вседействиясмотривдокументацииксвоемуконтроллеру. Например, контроллерAtmel AT91SAM9260, накоторомяотлаживаюсвойLinux, никакойвнутреннейфлеш-памятинеимеет, ипрошивкунадозаливать

взапаянныерядоммикросхемыData илиNAND-Flash памяти. Этобыло бымуторно, ноксчастью, мойконтроллер, ненаходянигдеподходящей программы, самостоятельнопереключаетсявтакназываемыйрежим SAM-BA Boot, и, будучивоткнутымпоUSB вкомпьютер, определяется какusbserial-устройство. Послечего, черезспециальныйсофт, написанныйAtmel’овцами, ямогунапрямуюзаливатьнужныеобразыпоадресам

впамятьустройствасквозьмикроконтроллер.

НуаеслитынеполенилсянайтиилизапаятьJTAG-интерфейс, тос легкостьюсможешьнетолькозаливатьвконтроллерсофт, ноитрассироватьего.

ЗАГРУЗЧИКИ

ЭтосамаясложнаяиответственнаячастьзагрузкиLinux. Чемпиономпо зоопаркуподдерживаемыхархитектуриразмерусообществаявляется универсальныйзагрузчикU-Boot (www.denx.de/wiki/U-Boot). Настраницахжурналаонемнеразупоминалось. Дляпервыхопытовсоветую именноего, таккактутесть, втомчисле, драйверанаогромныйсписок внешнейпериферии. Еслиутрировать, заточкаU-Boot подконкретное устройствочастосводитсякчтениюмаркировококружающихконтроллермикросхем. Длясовсемленивыхэтотзагрузчикужедопилен подпроцессорыAtmel AT91SAM иAVR32, смотрисайтыlinux4sam.org иavrfreaks.net. Навторомместе— загрузчикRedBoot, снеменьшими возможностями, носменьшимкомьюнити. Каюсь, япронегодоселе самничегонезнал, ноеслитежеЕмДебиановцысоветуют, тоонточно чего-тостоит:). Помимоуниверсальныхзагрузчиков, существуютеще заточенныеподотдельныеконтроллеры, пишущиесяпроизводителя-

086

миивключающиесяимивтакназываемыеSoftware Packages. Просто поищинасайтепроизводителя— нечтоподобноедляоблегчениятруда программистатамвсегдавыкладывают. Например, дляAtmel AT91SAM9 ужесуществуетбыстрыйикомпактныйзагрузчикAT91 Bootstrap. Он понимаетфайловыесистемыJFFS2, FAT, подцепляетфлешкииумеет загружатьLinux. Нуабольшегонаминенадо.

ДИСТРИБУТИВЫ

Вместотогочтобывручнуюконфигурироватьядро, писатьдрайвера, долгиечасыотлаживатьпроцессзагрузкиLinux наМКипо-всякому извращаться, ясоветуюменееуниверсальный, ноболеедейственный способустановкинатвоеустройствоготового«дистрибутива», гдебольшинствопроблем, описанныхвэтойстатье, ужерешены.

Полагаю, абсолютноечемпионствопоколичествуразныхархитектури пакетовпринадлежитпроектуДебианиегоподразделуEmDebian (www. emdebian.org). ПоследнийотличаетсяоторигинальногоDebian тем, что унегоменьшийразмер — тампростоповыкидывалиненужныефайлы, типадокументации. Хелповнасайтепроектазавались, естьподробные HowTo, многовспомогательныхутилитипрекомпилированныепакеты. Выполняйпопунктампроцессустановки— ибудеттебесчастье. У проектанетсобственногозагрузчика, поэтомумантейнерысоветуют использоватьсторонние, типаU-boot илиRedBoot (www.emdebian.org/ tools/bootloader.html).

Вообще, есликтвоемуустройствуможноподключитьвинчестерилимегафлешку, томожешьнезаморачиватьсяиставить«большой» дистрибутивDebian. Всяко, тампакетовбольше, даисистема«взрослая».

АеслитыприверженецГенту? Пожалуйста, ктвоимуслугамEmbedded Gentoo (www.gentoo.org/proj/en/base/embedded)! Хелпхороший, приме-

ровмного, авзагрузчикинамсватаютвсетотжеU-Boot.

Болеепродвинутыелинуксоиды, которымзнакомысловаLinux from Scratch, могутпопробоватьметадистрибутивOpenEmbedded (www. openembedded.org). Посути, этонаборскриптов, build-утилитаBitBake и наборметаданных, призванныеоблегчитьсборкукакядраЛинукс, таки любогософтаподсторонниедистрибутивы. Никакихрепозиториев, как вбинарныхдистрибах, унегонет, – затоестьинструментыдлялегкого созданияпакетовподIPK, RPM, DEB илиtar.gz форматы.

Кроме«универсальных» дистрибутивов, которыеможнопоставитьна все, чтоугодно, вприродесуществуютспециализированные, заточенныеподопределенныйтипустройств. Например, проектOpenWrt (openwrt.org), предназначенныйдляустановкиисключительнонаточки доступа. Народпомаленькупортируеттудасофт, которыйтызапросто сможешьскачатьпрямонаустройствоспомощьюпрограммыopkg, родственникадебиановскогоdpkg/apt. Прописываешьвместный аналогsources.list репозиторийподтвоюархитектуруинаслаждаешься круглосуточнымфайл-серверомиторрент-клиентомнастенке.

Подмобильники(ониотносятсяквстраиваемымустройствам!) сейчас тожесоздаютсявариантыЛинукса. Это— MontaVista (www.mvista. com) инашумевшийнедавноOpenMoko c платформойNeo FreeRunner (openmoko.org). Направлениеновое, перспективное, поэтомудистрибутивамивэтомсекторезанимаютсянестолькоэнтузиасты, сколько вполнесебекорпорации. Google сNokia такжепоспешиливыпустить своипродукты, имыполучилибегающиеподLinux’омAndroid’ыиN810. Неследуетзабыватьипросамыемаленькиеи«глупые»устройстваспримитивнымиМКбезMMU,например,ARM7.ДлянихбылпроработандистрибутивucLinux(uclinux.org/ports)сотвязаннымиотядрафункциямиуправления памятью.Несмотрянаотсутствиекакойбытонибылозащитыибезопасности (однапрограммаможетзапростоповредитьпамятьдругой),ucLinux—насто- ящаяиполноценнаясистемасподдержкоймногозадачности.

ЗАКЛЮЧЕНИЕ

Впределаходнойстатьиневозможноохватитьвесьпроцессустановки

инастройкиЛинуксанавстраиваемыеустройства, слишкомужвелик зоопаркархитектуриспектрконфигурации. Ноеслитеоретическийматериалтебязаинтересуетнастолько, чтотыпойдешьизучатьвопроспо сайтамифорумам, тоспрактикой, послеподготовки, проблемтемболее невозникнет! z

XÀÊÅÐ 04 /124/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Реклама

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

E

 

 

 

 

X

 

 

 

 

 

-

 

 

 

 

d

 

 

F

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

++++ BUY

>>m

 

 

 

 

coding

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

++++

++++

++++

РОМАН «SPIRIT» ХОМЕНКО

/ HTTP://TUTAMC.COM /

++++

++++Атака

++++наМИСТЕРАТВИТТЕРА

++++СкриптыдляспамаTwitter наPython’e

++++Недавномнепопалсянаглазапостнахабресрасполагающим

названием«Коммерческийинструментдляспамавтвиттере—

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

++++TweetTornado». Язаглянулнаофициальныйсайтэтогочуда-юда (tweettornado.com) ичутьсостуланеупал. Оказалось, чтоонстоит

++++целых100 долларов!

«Залюбовьнеплатят», — процитироваляисконныйдевизex-USSR

++++хакеровитутжевзялсязанаписаниесоответствующейпрограммы. Утаиватьтонкостиданногопроцессаотчитателейzянепланирую, поэтому изстатьитыузнаешь, какзлыекодерысоздаютрабочийинструментдля спамавтвиттере. Онбудетпредставлятьсобой4 скрипта:

++++

дляотсылкиодиночногосообщения;

ботадляимитацииактивностиаккаунта;

длядобавлениядрузей;

++++• дляудаления«недрузей».

Нучтоже, приступим.

++ ++

 

TWITTER

 

 

Преждевсего— немноготеориидляолдскульныхзомби, которыедо этогомоментаничегонезналиомикроблоггинге. Еслитынеизихчисла

— перескакивайкследующемуразделу. Итак, Twitter (twitter.com) — это

++++микроблогинговыйсервис, максимальныйразмерсообщенияврамках которогонедолженпревышать140 символов. Сутьсервисапроста: у тебяестьлентасообщений, вкоторойотображаютсязаписи, сделанные тобоюи твоимидрузьями(илинаязыкетвиттера— following). Вселюди,

++++следящиезаблогом(followers), будутполучатьтвоисообщения. Твиттерродилсяв2006 году, нопопулярностьсталнабиратьгде-тов начале2007. Сейчасвнемоколо5 миллионовпользователей. Содной стороны, вродебыималовато(посравнениюссоциальнымисетями), но,

++++учитываянеплохуюположительнуюдинамикувпланеростаитотфакт, что одноотправленноесообщениетутжебудетприходитьвсемзафолловленнымпользователям— «реклама» втвиттеребудетиметьоченьрадужные

перспективы. Сразуоговорюсь, мынебудемработатьсрусскоговорящей аудиториейтвиттера(всвязистем, чтоеепредставляют, восновном, нашистобойбратья— компьютерныеспециалисты), предпочтяейзлых буржуинов— вШтатахтвиттеружевыбралсявмассы, к«домохозяйкам».

ПОДГОТОВКАРАБОЧЕГОМЕСТА

СкриптымыбудемписатьнаPython — вLinux онестьвбольшинстве дистрибутивовпоумолчанию, адляработыснимвWindows нужноустановитьинтерпретаторверсии2.5 ибиблиотекуpyCurl. Всеэтохозяйство тыможешьнайтинанашемдиске. Дляэкспериментовсоскриптами рекомендуюзаранеезарегистрироватьновыйаккаунтнатвиттере вручную. Этотэтапавтоматизироватьмынебудемвсвязисналичием хорошейкапчи, номногоаккаунтовиненужно, дляспамахватитодного.

ТВИТТЕРAPI

Twitter всегдабылприветливкрекламнымагентам. Егоавторысоздали оченьпростоеAPI, позволяющееоднимPOST- илиGET-запросомпроиз- водитьлюбыедействиянадтвиттером. Всезапросыотличноописаныв документации(apiwiki.twitter.com). Длякаждогодействияприводится:

URL запроса;

форматответа, которыйвернетсервер;

методзапроса(POST илиGET);

параметрыиихописание;

примерзапроса.

Некоторыепримеры, взятыеиздокументации, тысможешьувидеть наврезках. Кстати, когдабудешьпроизводитьдействия, требующие

++++

088

XÀÊÅÐ 04 /124/ 09

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

>>

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

codingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

авторизации, помни, чтовзапросенужнопосылатьлогинипарольс помощьюHTTP Basic Authentication.

Привыбореформатарезультатамывсегдабудемвыбиратьxml — мнеон большенравится, даиобрабатыватьегооченьпросто.

ТеперьнемногоотвлечемсяотAPI твиттераинаучимсяпосылатьзапросыспомощьюPython.

PYTHON ИCURL

ВслучаевозникновениянеобходимостивыполненияHTTP-запросовя всегдавыбираюмощный, универсальныйинструмент, которыйработает вомногихязыкахпрограммирования— cURL.

ДляегоиспользованияподключимбиблиотекуpycURL:

import pycurl

Чтобыпринятьданныепослезапросаисохранитьих, библиотека pycURL требуетуказатьфункцию, котораябудетприниматьданные. Можно, конечно, исамимнаписатьее, нолучшевоспользуемсямодулем дляработысострокамиStringIO.

В объекте StringIO есть метод write, идеально подходящий для этой цели. Подключим модуль и объявим объект такими строчками:

import StringIO

data = StringIO.StringIO()

ТеперьможнообъявитьобъектpycURL инастроитьпараметры, например, дляосуществлениязапросаглавнойстраничкиxakep.ru. Полученныйрезультатвыведемнаэкран:

curl = pycurl.Curl() #устанавливаем параметры запроса

curl.setopt(pycurl.URL, 'xakep.ru') curl.setopt(pycurl.WRITEFUNCTION, data.write) #исполним запрос

curl.perform() #освободим память curl.close()

#получим результат и выведем на экран print data.getvalue()

Далее, манипулируяметодомsetopt, мыпожеланиюсможемизменять нашизапросы. Например, еслидобавитьнижеуказанныйкод, тозапрос будетосуществленчерезsocks сIP 192.168.1.1, размещеннымна2222 порту.

curl.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5) curl.setopt(pycurl.HTTPPROXYTUNNEL,1) curl.setopt(pycurl.PROXY, '192.168.1.1:2222')

ПОСТИНГСООБЩЕНИЙ

Вернемсякгорячолюбимомумикроблоггингуипопробуемприменить нашизнанияAPI твиттерапутемсозданияпервогоскрипта, который будетотсылатьсообщения:

import pycurl, StringIO data = StringIO.StringIO() curl = pycurl.Curl() curl.setopt(pycurl.URL,

'http://twitter.com/statuses/update.xml') curl.setopt(pycurl.WRITEFUNCTION, data.write) curl.setopt(pycurl.USERPWD,'spiritua:password') curl.setopt(pycurl.POSTFIELDS,'status=TEXT') curl.setopt(pycurl.POST,1)

curl.perform()

curl.close()

print data.getvalue()

Внем, каквидно, ничегосложного. Главное— незабудь «spiritua:password» заменитьнасвойлогинипароль, авместо«TEXT», соответственно, написатьнужноесообщение.

Чтобысделатьиспользованиеудобнееикаждыйразприпостинге сообщенийнеизменятьвисходникетекст, заюзаембиблиотекуsys для полученияаргументовизкоманднойстроки:

import sys

– иизменимнаш«TEXT» на«sys.argv[1]».

Вызыватьскриптмытеперьбудемтак:

sender.py "I love XAKEP"

Обративнимание, кавычкиобязательны, таккакпотомскриптберет толькопервыйаргумент. Безнихбудетотосланолишьоднослово.

ИМИТАЦИЯАКТИВНОСТИ

Чтобыпользователидобавилитебявдрузьяидолгонеудаляли, нужно имитироватьактивность, вестисебякакобычныйтвиттерянин, лишь иногдапубликуярекламныепосты. Анеслишкомлитяжелобудетпридумыватьсообщения? Может, прощеподсмотретьихусоседа? Сделаемхитро— выберемпроявляющегосетевуюактивностьчеловекаи утащимегопостыксебе. Посленаписанияподобногоскриптикадля автопостинга, егоможнопоставитьнаcron (программадлязапуска заданийпорасписанию) сежечаснымвызовом. Дляреализацииэтой задачинаучимсячитатьпостыюзеров. ВтвиттерAPI указано, чтонуж- ноиспользоватьGET-запросследующеговида— http://twitter.com/ statuses/user_timeline/spiritua.xml. Здесьвместо‘spiritua’ мывставим имявыбранногодонорасообщений. Порасширениюxml становится понятно, вкакомформатепридетрезультат:). Длядальнейшегопарсингаxml можноиспользоватьбиблиотеки, новнашемслучаеотэтого

XÀÊÅÐ 04 /124/ 09

089

 

Соседние файлы в папке журнал хакер