Модул 8. Въведение в операционни и вградени системи
Операционни системи
Операционната система взаимодейства пряко с хардуера и служи за платформа на други приложения, които в повечето случаи се използват от крайния потребител.
Работна среда
Работната среда се състои от един Линукс сървър с реален Интернет протокол адрес 46.10.253.12 и множество Windows клиенти. Достъпа на клиентите до сървъра се осъществява посредством Telnet използвайки SSH.
Telnet е разработен през 1969 г., като се започне с RFC 15, разширен в RFC 854 и стандартизиран като интернет стандарт STD 8 на Internet Engineering Task Force, един от първите интернет стандарти. Telnet осигурява достъп до интерфейс на командния ред на отдалечен хост до мрежови устройства и/или операционни системи. Поради сериозните опасения за сигурността при използването на Telnet през отворена мрежа като Интернет, използването му за тази цел значително намаля в полза на SSH.
SSH използва криптография с публичен ключ, за да удостовери отдалечения компютър и да му позволи да удостовери потребителя, ако е необходимо. Протоколът обикновено се използва за влизане в отдалечена машина и изпълнение на команди. Той може да прехвърля файлове, като използва свързаните протоколи за прехвърляне на файлове (SFTP) или защитени копия (SCP).
Системният софтуер включва шелл (shell), текстов редактор (text editor), компилатор (compiler) и дебъгер (debugger), инструменти (tools) и демони (daemons) на операционната система. Тези компоненти са изцяло системен софтуер, базиран на ядрото и библиотеката C.
Oтдалечен достъп
За осъществяване на отдалечен достъп до сървъра се изполва програмата PuTTY, която се разпространява като софтуер с отворен код и може да бъде изтеглена безплатно от Интернет на адрес: https://putty.org/

Как да получите помощ в Линукс?
Повечето системни приложения и команди, работещи в конзолен режим на операционната система Линукс, имат съпътстваща документация във формата на страници от ръководства - manual pages. За достъп до тях можете да използвате програмата man, със следния формат:
man <команда>
където <команда> е името на приложението, за което искате да получите информация. Ако съществува ръководство за избраната команда, man ще отпечата първата страница на екрана и ще предостави на потребителя средства за навигация в останалата част. Подробно описание на функциите, съответно можете да видите със следната команда:
man man

По-важните клавиши, които можете да изполвате при работа в програмата са PgUp за прелистване на страница нагоре, PgDn за прелистване на страница надолу и клавиша q за изход.
Файлове, директории и файлови системи
Файловете са базово понятие във всички популярни операционни системи. Това напълно се отнася и за ОС Линукс, която се характеризира с това, че в нея "всичко е файл" ("everything is a file"). Файловете се групират в директории, които от своя страна могат да съдържат други под-директории и по този начин се създава дървовидна структура.
Файловата система е начина за структуриране и организация на данните в компютъра. Тя представлява служебна таблица записана на диска, която операционната система използва, за да получи достъп до файловете. Записите в таблицата се наричат inode и накратко могат да се определят като сериен номер на файла.
Основни команди за работа с файловата система под Линукс са представени в таблицата по-долу:
pwd
Отпечава името на текущата директория
ls
Списък на съдържанието на директорията
mkdir
Създава директория
cd
Смяна на работната директория
rmdir
Изтриване на директория
cp
Копиране на файлове и директории
mv
Преместване и/или преименуване на файлове
rm
Изтриване на файлове и/или директории
ln
Създава връзка между файлове
cat
Конкатенира файлове и отпечатва на стандартния изход
Потребители и групи
За да получи достъп до функциите на Линукс, всеки потребител трябва да премине през процес на идентификация (login), където се въвежда потребителско име и парола. След въвеждане на правилна комбинация, потребителят се регистрира в операционната система и се асоциира с уникален идентификатор наречен uid
, който представлява цяло положително число. Тъй като имената също трябва да са уникални, в практиката те се използват по-често от uid
за идентифициране на потребителите.
От своя страна, всеки потребител принадлежи към една или повече потребителски групи. По този начин едни и същи атрибути или права могат да се задават едновременно на множество потребители, в зависимост от тяхната роля в системата.
Авторизацията за достъп до ресурсите в Линукс се осигурява, чрез тази концепция за потребители и групи. Например, операциите, които може да извършвате с файловете в ОС, зависят от правата, които притежава Вашият потребител и групата, към която принадлежи.
Файлови права
Традиционните файлови системи поддържат три режима за използване на файловете: четене (read), запис (write) или изпълнение (execute).
От друга страна, всеки файл в Линукс принадлежи на потребител и група, като по подразбиране, това са създателя на файла и първичната му група. На базата на това са дефинирани три нива на правата за достъп до файлови операции: за собственика (owner), за групата (group) и общо (public).
Чрез комбинирането на трите нива и трите режима се получават 9 възможни характеристики на файловете, които могат да се представят със следната битова маска (първият флаг показва дали полето описва директория или файл):

На горния пример, притежателят на файла има пълни права над файла, членовете на групата на файла имат права за четене и изпълнение, а всички останали потребители имат само право за четене.
В конзолен режим на Линукс може да разгледаме правата на елементите в текущата директория с помощта на командата:
ls -la
Управление на потребители и групи
В таблицата по-долу са дадени команди от операционната система, които се използват за управление на потребители и групи:
id
отпечатва реални и ефективни потребителски и групови идентификатори
chmod
промяна на бита на файловия режим
umask
задаване на маска за създаване на файлов режим
chown
промяна на собственика на файла и групата
chgrp
промяна на собствеността на групата
passwd
промяна на потребителската парола
Пренасочване на потоци
Линукс поддържа различни средства за работа с входно-изходните потоци, например:
Операторът "по-голямо"
>
пренасочва изхода на програмите към файл, вместо да бъдат отпечатани на екрана. Ако файлът вече съществува, съдържанието му ще бъде изтрито и версия с новото съдържание ще бъде запазена.Операторът "двойно по-голямо"
>>
пренасочва изхода и го добавя към файл, ако вече съществува.Операторът "конвейер"
|
пренасочва изхода на програмата отляво като вход на програмата отдясно.
Текстовият редактор Nano
Текстовите файлове са често използвано средство за съхранение и обмен на информация в Линукс. Поради това, почти всяка една дистрибуция предлага средства за работа с тях. В нашата работна среда ще използваме текстовия редактор Nano:

Oсновни функции на Nano:
nano readme.txt
Отваря или съдава файл readme.txt
Ctrl-o Y Enter
Запазва промените
Ctrl-r Alt-f
Отваря нов файл
Alt->
Превключва към следващ отворен файл
Alt-<
Превключва към предишен отворен файл
Ctrl-x
Изход от редактора
Полезна информация:
Webminal
Webminal е безплатна онлайн платформа, с която може да изпробвате част от възможностите на Linux без да е необходимо да инсталитрате ОС на вашата машина.
http://webminal.org/
Linux Bash Scripting
Bash script e скриптов език за програмиране под Linux. С негова помощ може да създавате цялостни програми с използване на различни команди. Той е мощен инструмент за автоматизация на системното администриране. Опитайте се да създадете и изпълните елементатни bash скриптове.
https://ryanstutorials.net/bash-scripting-tutorial/.
Вградени системи
Arduino Uno Board

Arduino Uno Pinout

Autodesk IDE
https://www.tinkercad.com/
Arduino IDE
https://www.arduino.cc/
Project Blinker

// put your setup code here, to run once:
void setup()
{
// Set Digital Pin 10 as Output Pin
pinMode(10, OUTPUT);
}
// put your main code here, to run repeatedly:
void loop()
{
// Turn Pin 10 to HIGH
digitalWrite(10, HIGH);
// Wait 1000 milliseconds
delay(1000);
// Turn Pin 10 to HIGH
digitalWrite(10, LOW);
// Wait 1000 milliseconds
delay(1000);
}
Project Buttoner

// put your setup code here, to run once:
void setup()
{
// Set Digital Pin 5 as Input Pin
pinMode(5, INPUT);
// Set Digital Pin 10 as Output Pin
pinMode(10, OUTPUT);
}
// put your main code here, to run repeatedly:
void loop()
{
// Read The Button State
int buttonState = digitalRead(5);
// Check the Button State
if (buttonState == HIGH)
{
// Turn Pin 10 to HIGH
digitalWrite(10, HIGH);
}
else
{
// Turn Pin 10 to LOW
digitalWrite(10, LOW);
}
// Delay a little bit to improve simulation performance
delay(10);
}
Мобилен робот
Arduino мобилен робот задвижван от два правотокови двигателя и управляван през bluetooth посредством Android мобилно устройство.
Shematics
Електрическа схема на свързване компонентите на робота:
Arduino
Изходен програмен код в интегрираната среда за разработка Arduino IDE:
// Control 2 DC motors with Smartphone via bluetooth
int state = 0;
int flag = 0;
int motor1Pin1 = 4; // pin 4 on L293D IC
int motor1Pin2 = 5; // pin 5 on L293D IC
int motor2Pin1 = 6; // pin 6 on L293D IC
int motor2Pin2 = 7; // pin 7 on L293D IC
void setup()
{
// sets the pins as outputs:
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop()
{
// if some date is sent, reads it and saves in state
if(Serial.available() > 0)
{
state = Serial.read();
flag = 1;
if(flag == 1) Serial.println(state);
}
// Forward
if (state == 'F')
{
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
if(flag == 1) Serial.println("FORWARD");
}
// Backward
else if (state == 'B')
{
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
if(flag == 1) Serial.println("BACKWARD");
}
// Stop
else if (state == 'S')
{
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
if(flag == 1) Serial.println("STOP");
}
// Right
else if (state == 'R')
{
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
if(flag == 1) Serial.println("RIGHT");
delay(1500);
}
// Left
else if (state == 'L')
{
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
if(flag == 1) Serial.println("LEFT");
delay(1500);
}
flag = 0;
}
Изтегли цялата програма: Arduino.ino
Android
Android мобилното приложение е разработено с помоща на продукта MIT App Inventor. Изтеглете готовият пакет на мобилното приложение Android.apk и го качете на вашето Android устройство.
Източник
Arduino Control 2 DC Motors Via Bluetooth
Проекти
2019
ArduinoBoy, https://github.com/cakasa/ArduinoBoy
KURU, https://github.com/Bojidar1308/K.U.R.U
2022
Car Project, https://github.com/Konstantinn56/ArduinoCarProject
Fire Alarm, https://github.com/StanimirRaykov/ArduinoFireAlarm
Pet Feeder, https://github.com/saltyyul/PetFeeder
Memory Game, https://github.com/Martin-Georgiev-21/Memory_Game_Repo
Car Game, https://github.com/banano-man/Car-Game
Smart Irrigation System, https://github.com/jacquelinegg/SmartIrrigationSystemSimulation
2023
Rover, https://github.com/mirkataa/Rover
RoboHand, https://github.com/KaterinaSlavova/RoboHand
IrrigationSystem, https://github.com/machev24/IrrigationSystem
Last updated
Was this helpful?