Архив за етикет: linux

Всяко хлапе знае за Линукс

Вчера гледах част от предаването „Това го знае всяко хлапе“ по BTV. За моя изненада на участичката зададоха следния въпрос: „Кое животно е знак на операционната система Линукс?“ (може и да не бяха точно тези думи, цитирам по памет). Споменаването на Линукс по телевизията може само да ме радва, защото това означава, че свободният софтуер е все по-популярен. За съжаление обаче организаторите на предаването не си бяха свършили работата както трябва и според мен въпросът е формулиран некоректно.

Линукс е само ядро, един от компонентите на операционна система. Освен ядрото за да имаме функционираща операционна система ни трябват много библиотеки, обвивка, иснтрументи и помощни програми, а вече хората очакват и графична среда. Ричард Столман предлага тази съвкупност от програми да се нарича ГНУ/Линукс, тъй като голяма част тях са разработени от проекта ГНУ. Освен това има много ГНУ/Линукс операционни системи, или различни набори от компоненти, които наричаме дистрибуции.

Често в ежедневната реч много от нас използват просто думата Линукс, но обикновено от контекста се разбира дали става въпрос за ядрото или за някоя от ГНУ/Линукс дистрибуциите. Когато е възможно двусмислие обаче, смятам че винаги трябва да се поясни какво точно се има предвид. Горният случай е точно такъв.

Според мен по-добре би било да се каже „Кое живото е знакът на Линукс?“, за да не се затормозяват хората незапознати с термина ядро. Употребата на пълен член „операционната система Линукс“ е логически неправилно, тъй като нямо точно една Линукс операционна система, а много ГНУ/Линукс дистрибуции. Всичко това може да ви се струва излишно мрънкане, но както се оказа от тези детайли зависи дали отговорът който сте дали ще се приеме за верен.

Във вчерашния случай девойката отговори, че животното е гущер, тъй като очевидно тя е потребител на дистрибуцията Сусе. Водещите и сценаристите обаче се оказаха доста незапознати с темата и обявиха отговорът и за грешен. Верният отговор според тях е пингвин.

Скъпи сценаристи на предаването, или който там от екипа подготвя въпросите: на така зададеният въпрос има повече от един верен отговор!

Освен Тукс пингвина талисман на Линукс ядрото, и Гийко гущера за които вече споменахме ще се учудите колко още представители на животинския свят ползват ГНУ/Линукс.

Та само във Федора проекта има цяла зоологическа градина, дори някои видове за пръв път са били открити там! Ето и списък, който не претендира за изчерпателност*:

* извадил съм жвотните свързани с дистрибуции от http://chl.be/mascots/

В борбата за сериен порт

Историята по-долу се разви преди доста време, но скоро ми се наложи да си я припомня. Реших, да си запиша нещата тук, пък може и на някой друг да свърши работа.

Напоследък серийните портове взеха напълно да изчезват от компютрите – осбено от преносимите. Дори и моят, който не е първа младост няма такъв (сигурно и защото е евтин модел).

RS232 интерфейсът може да е бавен, с обемист конектор и да работи на малки разстояния, но той има и едно предимство – изклютително прост е. Ако се занимавате с разни малки контролери ще знаете, че той е в порядъци по-удобен, достъпен, евтин и прост за реализация от USB или ETHERNET например.

И така, за да се сдобия с тази незаменима екстра се запътих към близкия магазин за конвертор от USB към сериен порт. Взех си и компютъра, защото за мен е важно чудото да работи под Линукс, а обикновено по опаковките това не го рекламират много. Преди да го купя включих USB конверторът и ядрото веднага го разпозна и се появи нов сериен порт. Купих го.

За съжаление радостта ми беше кратка, защото след като се прибрах установих, че въпросният конвертор не може да си комуникира с никакво серийно устройство – макар, че се разпознава. Може да е бил дефектен моя, но по-сокоро предположението ми е, че има проблеми с драйвера – cypres_m8. След това съм пробвал с други конвертори с чипове на FTDI и Prolific 2303 и при тях нямаше такъв проблем със серийната комуникация. Въпреки това при ситуации в които използвате серийния порт не съвсем по предназначение, а примерно превключвате контролните линии много бързо (bit banging) за да говорите някакъв друг протокол тези конвертори може и да не работят.

В крайна сметка реших да си взема „истински“ RS232 под формата на PCMCIA карта. След търсене с Гугъл попаднах на блога на Данчо, където той беше обявил за продажба точно такава карта поради несъвместимост с неговия компютър. Видяхме се. Пъхнах картата в моя компютър – ядрото я разпозна веднага – взех я.

Прибрах се. Първата ми работа беше да тествам новата придобивка – отново нищо! Никаква комуникация, нито с мобилния ми телефон, нито със стар външен модем, който успях да изровя.

Самата платка получих в картонена кутия, на която имаше йероглифи и единствено се разбираше, че пристига от Хонг Конг. Имаше и диск с драйвери – само за Унидоус. Всички отличителни белези по картата се свеждаха до надпис „BBL PCMCIA RS-232 CARD“. Търсенето за информация по тези ключови думи не даде полезен резултат.

Решен да не се предавам толкова лесно направих следния експеримент. Стартирах minicom и настроих порта на скорост 9600 бита в секунда. Пуснах да се изпраща файл съдържащ единствено буквата „а“. След това закачих изходящата линия (TX) към осцилоскоп и видях следното:

oscilloscope screen

Ура! Картата все пак работи и дори предава данни. Единствената малка подробност е, че ги предава доста по-бързо от колкото се очаква. На картинката по-горе осцилоскопът е настроен на 50 микросекуни за деление по оста Х. Грубо в едно деление се предават 3 бита, значи скоростта е над 62500 бита/секунда – доста над очакваните 9600.

След още малко търсене, проблемът напълно се изясни. Основният компомент осигуряващ серийната връзка e чип от вида UART (Universal Asynchronous Receiver-Transmitter). По-конкретно в моята платка има 16c950. Ядрото го разпознава правилно и драйверът успешно си говори с него. Скоростта обаче се определя чрез делене на тактовата честота получена от външен кварцов резонатор. Оказва се, че няма начин драйверът да разбере каква е честотата на този резонатор. До преди време най-масово се е използвал резонатор с честота 1.8432 MHz, която разделена на 16 дава базова скорост от 115200 бита/сек. Това е записано и в кода на драйвера като стойност по подразбиране.

В момента често се използват резонатори с по-високи честоти за да се постигнат по-големи скорости. Имайки предвид, че при мен получената скорост е около 7-8 пъти по-голяма от очакваната и стандартните стойности дадени в спецификацията на чипа установих, че в моята платка резонаторър най-вероятно е с честота 14.7456MHz, което разделено на 16 дава базова скорост от 921600 бита/сек. За щастие има лесен начин тази скорост да бъде указана с помощта на програмата setserial:


setserial /dev/ttyS0 baud_base 921600

Повтарям теста с осцилоскопа и този път резултатът е доста обнадеждаващ:

oscilloscope screen

Предаването на един бит отнема малко над 2 деления или 100 микросекунди. При зададена скорост от 9600 това е точно колкото се очаква – 1/9600=0,000104167 сек или около 104 микросекунди.

Комуникацията с мобилния телефон, стария външен модем и всичко друго което закача вече работи!

Остана само да добявя едно udev правило, за да не пиша горната команда всеки път когато пъхам картата. Аз си създадох нов файл – /etc/udev/rules.d/10-serial.rules и в него добавих само един ред:

KERNEL=="ttyS0", RUN+="/bin/setserial /dev/ttyS0 baud_base 921600"

Вече всички инструменти са на лице и мога да се заема с работата по проекта за монтаж на вентилатор в банята :).

Линукс курсът приключи

Миналата седмица беше последната лекция от Линукс курса.

В началото дойдоха повече от 25 човека и дори не стигнаха столовете в залата. Към края редовните поситетили останаха 4-5.

Предполагам, че целевата група към която бяхме насочили рекламата е била погрешна. Със Свилен си мислехме, че ще се заинтересуват най-много ученици, затова разлепихме плакати по всички училища. В крайна сметка обаче, нито един от останалите към края не беше ученик. Повечето от тях бяха разбрали за курса напълно случайно – от приятели, колеги. Не знам, ако правим пак нещо подобно кои хора да очакваме като потенциална аудитория и къде да обявим нещата, че да ги видят.

Надявам се на тези които избраха да слушат какви ги говорим да им е било интересно и да са научили ползени неща. Благодаря им за сериозното отношение и постоянството! Също така специални благодарнисти на Васко за любезното домакинство!

За който се интересува дали и какво ще има за в бъдеще – не мога да кажа, зависи от всички нас. Ще се опитаме да не оставим нещата до тук, но кога и под каква форма ще продължат все още нямам идея.

Може би вие имате?