неділю, 28 грудня 2014 р.

Огляд основних компіляторів на мові програмування С

 Як я часто пишу, що С++ не С, бо там не має ООП ( Об 'єктно-орієнтованого програмування ), так синтаксис процедурного програмування в С++ є, схоже на С, але, є свої розбіжності, я вирішив описати коротко основні компілятори мови програмування С. Чому, тому що часто качають Microsoft Visual C++, C++ не дає можливості скомпілювати між собою код, сам знаю, коли компілював програму в Borland C++, а код написаний в книжці для Microsoft Visual C++ 6.0. Думаю всі знають цей компілятор. Мова С дає можливість кросскомпіляції, але на мій вік програмування, це лише між своїми стандартними бібліотеками, а так все залежить від ОС, так що кросскомпіляція, розуміння розтягнуте. Ми не будемо розглядати такі компілятори як Borland C, які застаріли. Ми будемо розглядати ті які розвиваються, також які підійдуть до навчання. Я можу не написати за всі компілятори, але напишу вільні ( де не потрібно шукати ключі чи кряки ) ви поставили і програмуєте без обмежень.
До речі всім початківцям я раджу почати не з С++, а саме з С, тому що він простіший, самі все зрозумієте. Почнемо по списку, ми розглянемо:
- Clang
- GNU Compiler Collection
- MinGW
- Pelles C

 - Clang

Сайт

Компілятор на базі LLVM, крім С, включає в себе також C++ ( clang++ ), Objective-C и en:Objective-C++. Створений що б замінити GCC компілятор. Використовується в ОС FreeBSD як основний, хоча можна і використовувати GCC. Історію ви можете на сайті Вікіпедії, а наша задача скомпілювати код хоч hello world. Будемо використовувати такий код:
#include <stdio.h>
int main( void ) 
{
  printf("hello world\n");
  return 0;
}
> clang hello.c -o hello.exe
ми також можемо скомпілювати код в проміжний код ( байт код ) LLVM:
> clang hello.c -emit-llvm -c -o hello.bc
і запустити проміжний код в LLVM JIT утилітою lli
> lli hello.bc
hello world

 - GNU Compiler Collection ( GCC )

Сайт
https://uk.wikipedia.org/wiki/GNU_Compiler_Collection

На ранніх порах це був чистий С компілятор, раніше він так і перекладався Gnu C Compilator, але йшли часи і проект переріс в GNU Compiler Collection, там є і С++, Ada, Fortran, C. Провів перелік яких знаю, там є і реалізація GNU Java, але з появою OpenJAVA, той компілятор швидше викинуть , за не потреби і ніби хочуть добавити Go, або це вже остаточно зробили. Підтримується багатьма ОС, та архітектурами, такими як: Alpha, ARM, AVR, x86, SPARC, PowerPC, SuperH та інші. Але то інша історія. Наша задача показати і скомпілювати код.
Так як ми будемо використовувати лише компілятор С, тому пишемо сс, саме так викликається компілятор С в GCC:
> cc hello.c -o hello.exe
> hello.exe
hello world


Я використовую Cygwin для роботи з компілятором.
варто про

 - MinGW

Сайт

Це компілятор GCC для ОС Windows. Крім GCC там зроблено все для розробки програм в ОС Windows, там добавлені файли заголовків та статичні бібліотеки, для того що б використовувати Windows API.
Код компілюється так само як і в GCC.

- Pelles C

Сайт
www.christian-heffner.de/
IDE для мови програмування С, працює в Windows і Pocket PC. Створений на основі LCC.
Робимо як далі, завантажили, встановили, запускаємо: File → New → Project → Win32 Console program (EXE) як на скріншотові. Та даємо назву проекту в розділі Name.

Далі File → New → Source code. Зберігаємо як hello.c File → Save as...
Копіюємо код вище, зберігаємо ( CTRL+S ), потім збираємо проект CTRL+B, або вкладка Project → Build test.exe ( test.exe так ми назвали проект, у вас буде так як ви назвали ім'я проекту, назва довільна ), Запускаємо проект Project → Execute test.exe або комбінацією клавіш Ctrl+F5 і повинно вийти на щось схоже

Якщо немає помилок.

 Коротко все, я не описував установку компіляторів, бо наприклад інсталятор Mingw періодично на зовнішній вигляд міняється, після установки назву папки потрібно занести в список перемінного середовища, де встановлений проект, якщо ви використовуєте Cygwin то це все автоматично, буде.Для того що б не вводити купу команд кожного разу, варто використовувати make файл, який потрібно написати, про нього ми поговоримо в наступному записі.

середу, 4 червня 2014 р.

FreeBSD як десктопна ОС

Почнемо з самого головного, FreeBSD - вільна Unix-подібна операційна система, нащадок AT&T Unix по лінії BSD, створеної в університеті Берклі . FreeBSD працює на PC-сумісних системах сімейства x86, включаючи Microsoft Xbox, а також на DEC Alpha, Sun UltraSPARC, IA-64, AMD64, PowerPC, NEC PC-98, ARM. Готується підтримка архітектури MIPS. Та це Ос, а не ядро linux. Я використав linux, але мені не сподобалося, у кожного свій смак, але останнім краплею став лінукс і його кількість дистрибутивів, з UNIX вирішив зав'язати, але вирішив встановити FreeBSD (на той момент був реліз 8.2) і помалу я читав керівництво http:// www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/index.html і він у мене став як десктопна ОС, тому буде стаття як налаштувати десктопну ОС FreeBSD, чому настроїти? Тому що FreeBSD це як конструктор, якщо ви встановите цю ОС то максимум при завантаженні що ви побачите це таку картинку:

  А далі доведеться налаштувати всі ручками. Для тих хто не хоче клацати і копатися у конфігах, читати мануали, Cовет встановити PC-BSD, це дестопнаий варіант FreeBSD, причому програми в PC-BSD працюють і з FreeBSD, це перевірено особисто мною. Хочеться також попередити, що я використовую FreeBSD 9.0 і по моїх зауважень що є в інтернеті, деякі налаштування трохи змінилися, але не суттєво, я робив все по своєму, та що пишу як є. Установку ОС писати не буду, з FreeBSD 9.0 вже йде bsdinstall, що там і приклад встановлення ОС почитайте тут BSDINSTALL FreeBSD (рус.). Якщо у вас все добре як і у мене тоді будемо ставити/pkgng, та з виходом pkgng я вже не використовую утиліти pkg_ *, і так є два варіанти установки, що їх я використав, перший: Встановлюємо git якщо його не встановлено, в цьому випадки ми лише раз будемо використовувати утиліти pkg_ *, і так робимо установку GIT:

# pkg_add -r git 

...
установка пройшла, що б не перезавантажуватися ми будемо робити так:

# exit

Якщо не бачимо login: то ще раз пишемо

# exitLogin:Root Password:
# git - version Git Version 1.7.8
Далі про перший варіант установки можна почитати тут https://github.com/pkgng/pkgng, так, пишемо і робимо все по порядку:

# git clone https://github.com/pkgng/pkgng
# cd pkgng
# make && make install && make clean


Я думаю варто описати що робимо. Коротенько ми завантажили код pkgng і перещлі в папку pkgng і скомпілювали, якщо скомпілювали то переходимо до налаштувань, а поки другий спосіб установки pkgng
  2. Другий спосіб установка через порти, якщо ви встановлювали порти з установкою ОС, то в 9.0 в портах немає, тому будемо робити оновлення портів за допомогою portsnap. Детально почитати тут: portsnap . Мої налаштування
etc portsnap.conf
# $ FreeBSD: release/9.0.0/etc/portsnap .conf 226322 2011-10-12 20:38:07 Z cperciva $
# Default directory where compressed snapshots are stored.
# WORKDIR = var db portsnap
# Default location of the ports tree (target for "update" and "extract" ).
# PORTSDIR = usr ports
# Server or server pool from which to fetch updates. You can change
# this to point at a specific server if you want, but in most cases
# using a "nearby" server won't provide a measurable improvement in
# performance. SERVERNAME = portsnap.FreeBSD.org
# Trusted keyprint. Changing this is a Bad Idea unless you've received
# a PGP-signed email from telling you to

# change it and explaining why. KEYPRINT = 9b5feee6d69f170e3dd0a2c8e469ddbd64f13f978f2f3aede40c98633216c330

# Example of ignoring parts of the ports tree. If you know that you
# absolutely will not need certain parts of the tree, this will save
# some bandwidth and disk space. See the manual page for more details.
#
# WARNING: Working with an incomplete ports tree is not supported and
# can cause problems due to missing dependencies. If you have REFUSE
# directives and experience problems, remove them and update your tree
# before asking for help on the mailing lists.
#
# REFUSE arabic chinese french german hebrew hungarian japanese
# REFUSE korean polish portuguese russian ukrainian vietnamese
# List of INDEX files to Build And The DESCRIBE FILE To Use For Each INDEX INDEX-7 DESCRIBE.7 INDEX INDEX-8 DESCRIBE.8 INDEX INDEX-9 DESCRIBE.9

# change it and explaining why. KEYPRINT = 9b5feee6d69f170e3dd0a2c8e469ddbd64f13f978f2f3aede40c98633216c330
# Example of ignoring parts of the ports tree. If you know that you# absolutely will not need certain parts of the tree, this will save# some bandwidth and disk space. See the manual page for more details.## WARNING: Working with an incomplete ports tree is not supported and# can cause problems due to missing dependencies. If you have REFUSE# directives and experience problems, remove them and update your tree# before asking for help on the mailing lists.## REFUSE arabic chinese french german hebrew hungarian japanese# REFUSE korean polish portuguese russian ukrainian vietnamese# List of INDEX files to Build And The DESCRIBE FILE To Use For Each INDEX INDEX-7 DESCRIBE.7 INDEX INDEX-8 DESCRIBE.8 INDEX INDEX-9 DESCRIBE.9Багато міняти і писати не треба, далі перший раз робимо:
# portsnap fetch
# portsnap extract
І оновлюємо дерево портів:
# portsnap fetch update
знову ж якщо все пройшло вдало то:
# cd/usr/ports/ports-mgmt/pkg# make install clean Установку ми зробили в двох варіантах, тепер будемо робити установку, поїхали:
$echo "WITH_PKGNG = yes ">>etc/make.confМой конфіг:$catusr/local/etc/pkg.confASSUME_ALWAYS_YES: YESPACKAGESITE: http://pkgbeta.freebsd.org/freebsd-9-i386/latestPKG_MULTIREPOS: NO
Для редагування можна використовувати стандартний консольний редактор, написати що потрібно, натиснути ESC - leave editor - save changes для того що б зберегти що змінили або написали. Більш докладно про pkgng Використання PKGNG  Далі будемо ставити Х-си через pkg: # pkg install xorg 
Робимо настройку:
# Xorg-configure 
Якщо все ОК! Те трошки його відредагуємо, в мережі багато інфи як локалізувати FreeBSD, і так x11-input.fdi я писав тільки раз, а були випадки що варіанти з настройками і використання x11-input.fdi не допомагав, тому як радить керівництво: Якщо миша не працює, його необхідно настроїти. Зверніться до Разд. 2.10.10 в главі про встановлення FreeBSD. Додатково, починаючи з версії 7.4, секція InputDevice в xorg.conf ігнорується в користь автоматичного пошуку устройств. Для повернення старого поведінки, додайте такі рядки в секції ServerLayout або ServerFlags: Option "AutoAddDevices" "false", Налаштування Xorg
 Мої файл конфігурації xorg.conf:
Section "ServerLayout" 
 Identifier "X.orgconfigured" 
 Screen 0 "Screen0" 0 0 
 InputDevice "Mouse0" "CorePointer" 
 InputDevice "Keyboard0" "CoreKeyboard" 
 Option "AutoAddDevices" "false" 
EndSection 

Section "Files" 
 ModulePath "/usr/local/lib/xorg/modules" 
 FontPath "/usr/local/lib/X11/fonts/misc/" 
 FontPath "/usr/local/lib/X11/fonts/TTF/" 
 FontPath "/usr/local/lib/X11/fonts/OTF" 
 FontPath "/usr/local/lib/X11/fonts/Type1/" 
 FontPath "/usr/local/lib/X11/fonts/100dpi/" 
 FontPath "/usr/local/lib/X11/fonts/75dpi/" 
EndSection 

Section "Module" 
 Load "dbe" 
 Load "dri" 
 Load "dri2" 
 Load "extmod" 
 Load "glx" 
 Load "record" 
EndSection 

Section "InputDevice" 
 Identifier "Keyboard0" 
 Driver "kbd" 
 Option "XkbLayout" "us,ru,ua (winkeys)" 
 Option "XkbOptions" "grp:alt_shift_toggle,grp_led:scroll" 
 Option "XkbModel" "pc105" 
EndSection 

Section "InputDevice" 
 Identifier "Mouse0" 
 Driver "mouse" 
 Option "Protocol" "auto" 
 Option "Device" "/dev/sysmouse" 
 Option "ZAxisMapping" "4 5 6 7" 
EndSection 

Section "Monitor" 
 #DisplaySize 480 270 # mm 
 Identifier "Monitor0" 
 VendorName "BNQ" 
 ModelName "BenQ G2255" 
 HorizSync 30.0 - 83.0 
 VertRefresh 50.0 - 76.0 
 Option "DPMS" 
EndSection 

Section "Device" 
 ### Available Driver options are:- 
 ### Values: : integer, : float, : "True"/"False", 
 ### : "String", : " Hz/kHz/MHz" 
 ### [arg]: arg optional 
 #Option "NoAccel" # [] 
 #Option "SWcursor" # [] 
 #Option "ColorKey" #  
 #Option "CacheLines" #  
 #Option "Dac6Bit" # [] 
 #Option "DRI" # [] 
 #Option "NoDDC" # [] 
 #Option "ShowCache" # [] 
 #Option "XvMCSurfaces" #  
 #Option "PageFlip" # [] 
 Identifier "Card0" 
 Driver "intel" 
 VendorName "Intel Corporation" 
 BoardName "82815 Chipset Graphics Controller (CGC)" 
 BusID "PCI:0:2:0" 
EndSection 

Section "Screen" 
 Identifier "Screen0" 
 Device "Card0" 
 Monitor "Monitor0" 
 SubSection "Display" 
 Viewport 0 0 
 Depth 1 
 EndSubSection 
 SubSection "Display" 
 Viewport 0 0 
 Depth 4 
 EndSubSection 
 SubSection "Display" 
 Viewport 0 0 
 Depth 8 
 EndSubSection 
 SubSection "Display" 
 Viewport 0 0 
 Depth 15 
 EndSubSection 
 SubSection "Display" 
 Viewport 0 0 
 Depth 16 
 EndSubSection 
 SubSection "Display" 
 Viewport 0 0 
 Depth 24 
 EndSubSection 
EndSection
Про Option "AutoAddDevices" "false" ми вже знаємо, це відключити автоматичний пошук пристроїв. 
Option "XkbLayout" "us, ru, ua (winkeys)"
Option "XkbOptions" "grp: alt_shift_toggle, grp_led: scroll"
Option "XkbModel" "pc105"

Це налаштування клавіатури, як бачимо Option "XkbLayout" "us, ru, ua (winkeys)" тут мова Американський, Російський та Український, Option "XkbOptions" "grp: alt_shift_toggle, grp_led: scroll" тут в нас перемикання клавіатури через alt + shift, і використання мишки прокручування, Option "XkbModel" "pc105" - тип калвіатури. Слід зауважити що у мене відключений в rc.conf hald і dbus, все це я зауважив Всі за Option "AutoAddDevices" "false", раніше я робив запис в etc rc.conf

# eeetc/rc.conf
hald_enable = «YES»
dbus_enable = «YES»

Але з новими налаштуваннями у мене були гальма, і допомогло відключення hald і dbus, я закоментувавши ці рядки, написав
# перед рядками.


$ touch .xinitrc
$ ee. xinitrc
export LC_ALL = uk.UTF-8
export LANGUAGE = uk.UTF-8
export LANG = uk.UTF-8
exec startlxde

У мене настроїтися на Українська мова, поставте ru замість uk і все буде у вас російська мова, далі створюємо файл .xsession 

$ touch. xsession
$ ee .xsession
#! bin Bash Exec startlxde
$ chmod + x ~ /.xsession

це для того як зайдемо, то все автоматом запускається і не треба писати команду startx. Далі ставимо LXDE 

# pkg install lxde-meta

Настройку Х-сiв треба робити в папці користувача, створіть його за допомогою команди
# adduser ... Дайте йому ім'я й пароль - все що буде від вас требоватся в терміналі. Я використовую на комп'ютерах LXDE або XFCE тому що вони старі, скажімо статтю що я пишу на даний момент середні характеристики: P-III 1 Ghz процесор, 512 Мб оперативної пам'яті, 32 мб відео карта, і монітор 22 дюйми. Далі все залежить від вас, яке ПЗ ставити . Та то мій комп'ютер, не ваш, тому у вас можуть бути проблеми, від цього ніхто і ніде не застрахований, наприклад ставив я знайомого FreeBSD 9.0 у нього відео мапа radeon серії не пам'ятаю який, і Х-си стартанули коли я іспрвіл в xorg.conf Option "NoAccel" "true", далі звукова карта сама вже определялалсь і завантажувати драйвер і шмаманіть не довелося, далі раджу всім читати керівництво Мануал FreeBSD.

Захист в мікросхемі DS2432, DSQ8, 1-WIRE

Чіпи 1-WIRE використовуються часто в принтерах Konica Minolta PagePro 1300 \ 1350 \ 1380 \ 1400, кольорових копіювальних апаратах Minolta bizhub 250 \ 251 и DEVELOP ineo +250 \ 251, XEROX Phaser 6120 та інших моделей.
 В DS2432 захист реалізований слабо і трохи не продумано, досить взяти новий чіп і конфігуровати його без не активного захисту сторінок пам'яті і чіп можна прошивати багато раз, оригінальний чіп що поставляється з принтером прошивати не вийде, все залежить від програми для роботи з даним чіпом який у вас є. Наприклад програми http://lapatushka.com/ мають таку можливість, програматором 1-WIRE lapatushka.com можна читати і програмувати, це можна дізнатися якщо взяти і на нажати кнопку “Check chip” і якщо буде напис “Restorable” то чіп прошити можна, але не всі області пам'яті. Bсе залежить від конфігурації чіпа, на сайті є безплатні демо версії програм, ви можете загрузити і по практикуватися, якщо вам це цікаво і є чіпи DS2432. Демо версії не мають можливості запису.
 Чіп DS2432 має будову:
  - Область “Лазерного ПЗП” - по деяким причинам переписати не можливо. Задається при виготовленні чіпа на заводі виготовлення мікросхеми, розмір 8 байт.
  -Область “Данні” - функціональність данної області залежить від значення конфігураційних регістрів (фьюзи), в залежності від значення в цих регістрах ця область даних може бути доступна для читання і запису, тільки зчитування, ОТР, доступ по паролю.
  - Область “Статус” - конфігураційні байти, якими задається поведінка області даних.
  -Область “Секрет” - область даних розміром 8 байт, яка охороняє код доступу до області даних на запис. Дані з області даних вільно можуть читанні. Для того щоб змінити в області даних необхідно знати “секрет”. “Секрет” можна установити, але прочитати його не можливо. При зчитуванні “секрета” ми побачимо FF при любому значенні.
 Висновок, не всі чіпи можна прошивати, це все пояснюється конфігурацією в зоні ОТР, саме там принтер в першу чергу зчитує інформацію про кількість надрукованих листків.

 Варто і згадати про захист в чіпах Lexmark, в принтерах серії:
Lexmark E230, E232 , E330 , E332 , E338 , E340, E240, E220, E321, E323, E320, E322;
Lexmark T420, T430, T520, T620, T630
там використовуються замовлені версії DS2432, відрізняється вона адресою по зміщенню 0x90, в замовленому чіпу встановлено 0xB3. Версія замовлених чіпів Lexmark для продаж у вільному доступі не має, саме тому за надійним і продуманним захистом там використовуються лише емулятори.
 Слід зазначити що це є не єдиний випадок таких спроб захисту, скажімо подібний захист діє і в копіювальних апаратах Xerox 5915/5921 там використовується DS2502, захист організований способом схожим з Lexmark.

Про чіпи S3CC921

Чіп має дві області пам'яті, прошивальну EEPROM і не прошиваючу OTP «One Time Programmable».
 В області EEPROM знаходяться лічильники використання тонера, дану область можна обнулити повністю, запис і зчитування можна багаторазово.
 OTP (One Time Programmable) Зона Одноразового Програмування. Читати данні можна багаторазово, запис можливий один раз якщо байт в ОТР зоні рівний Ffh, якщо інше значенні то лише читати.
 Ще є наступний сюрприз Progress Bar, який знаходиться в ОТР зоні, початкова конфігурація Progress Bar
[FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF]
Що відповідає 100 процентам тонера, через деякий час друку параметри Progress Bar записуються в байти з FF в А5 і коли при зчитуванні чіпа ви бачите Progress Bar 
[A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5 A5] 
це означає що статус тонера використаний на 100 процентів, якщо прошити чіп то прінтер дізнається що вся область має А5, що чіп уже використаний і статусу в готовність не установить.
 Існує два типи мікросхем S3CC921:
  S3CC921 (92112) – на корпусі маркіровка «92112»
  S3CC921 (92121) – на корпусі маркіровка «92121»

Принтера з такими чіпами обнуляють до песного моменту, прошивають принтер, або ставялть емулятори.