رفتن به نوشته‌ها

ماه: جولای 2015

برنامه نویسی GPIO برای رزبری پای

برنامه نویسی برای پایه های GPI/O برد رزبری پای از قسمت های جالب کار با این برد هست . به جز GPI/O برای قسمتهای مختلف مثل PWM یا پورت سریال هم به همین صورت میشه برنامه نوشت و از این قسمتها استفاده کرد .

برای این کار ابتدا یک کتابخانه C از گیتهاب دانلود میکنیم . من ترجیح میدم از ترمینال استفاده کنم :

sudo apt-get update
sudo apt-get install git
git clone https://github.com/WiringPi/WiringPi

اگر برنامه git رو نصب ندارید ابتدا نصبش کنیم . سپس از گیتهاب کتابخانه رو کلون میکنیم .

برای چک کردن اینکه آخرین ورژن رو دریافت کرده باشیم ( در صورتیکه قبلا این کتابخانه را گرفته باشیم و الان دوباره ازش استفاده میکنیم ) از دستور زیر استفاده میکنیم :

cd wiringPi
git pull origin

ما الان آخرین ورژن از کتابخانه رو روی SD Card برد رزبری پای کپی شده داریم . برای نصب این کتابخانه در مسیر جاری ( داخل پوشه wiringPi ) از دستور زیر استفاده میکنیم :

cd wiringPi
./build

بعد از نصب کتابخانه نوبت به تست کارکرد صحیح دستورات میرسه :

بهترین کار استفاده از Manual این کتابخانه است .

man gpio

از بین سوییچ های مختلفی که دستور gpio دارد سوئیچ های g- ( شماره گذاری پین ها طبق شماره گذاری انجام شده در برد به جای شماره گذاری انجام شده در wiringPi ) و همچنین دستورات read ( خواندن یک پین ) و write ( نوشتن یک مقدار ۰یا ۱ بر روی یک پین ) برای کار فعلی ما کفایت میکنند .

برای تست کارکرد صحیح ابتدا یک LED را بین یکی از پایه های GPIO ( مثلا پایه شماره ۴ ) و پایه زمین وصل میکنیم ، کدهای زیر در ترمینال باعث تعریف شدن این پایه بصورت خروجی و سپس تغییر وضعیت آن از ۰ به ۱ خواهد شد .

gpio -g mode 4 output
gpio -g write 4 1
gpio -g write 4 0

همچنین برای خواندن مقدار یک پین میتوان از دستورات زیر استفاده کرد :

gpio -g mode 4 up
gpio -g read 4

که یک مقدار برگشتی ۰ یا ۱ نشاندهنده بالا یا پایین بودن پین مورد نظر است .

برنامه نویسی WiringPi به زبان C

برای نوشتن برنامه به زبان C ابتدا باید هدر فایل wiringpi.h به سورس برنامه مورد نظر اضافه شود و درهنگام کامپایل هم کتابخانه wiringpi با سوئیچ l- به کامپایلر معرفی شود .
در تابع main ابتدا مقدار دهی اولیه پایه ها را انجام میدهیم :

wiringPiSetupGpio(); // Initializes wiringPi using the Broadcom GPIO pin numbers

سپس با نوشتن دستور

pinMode([pin], [mode])

میتوانیم پین ها را در یکی از مدهای Input یا Output و یا PWM قرار دهیم . مثلا :

wiringPiSetupGpio()
pinMode(17, INPUT);
pinMode(18, OUTPUT);
pinMode(27, PWM_OUTPUT);

برای تغییر دادن مقدار یک پین output میتوانیم از دستور زیر استفاده کنیم :

digitalWrite([pin], [HIGH/LOW])

به عنوان مثال :

digitalWrite(23, HIGH);

برای یک پین که بصورت pwm تنظیم شده است میتوانیم از تابع زیر استفاده کنیم :

pwmWrite([pin], [0-1023])

به عنوان مثال:

pwmWrite(17, 410);

دستور فوق DutyCycle موج خروجی روی پایه ۱۷ را برابر ۴۰٪ قرار می دهد ( ۰.۴*۱۰۲۴ = ۴۱۰ )

برای خواندن ورودی دیجیتال از دستور زیر استفاده میکنیم :

digitalRead([pin])

به عنوان مثال این دستور پین ۱۷ را چک کرده و متناسب با ۰ یا ۱ بودن آن پیغام مناسب را چاپ میکند :

if (digitalRead(17))
    printf ("pin 17 is HIGH");
else
    printf("pin17 in LOW");

همانطور که در موقع تست gpio دیدیم . اینجا نیز مقدار برگشتی ۰ یا ۱ خواهد بود .

برای استفاده از مقاومت PullUp یا PullDown در صورت نیاز از تابع زیر استفاده میکنیم:

pullUpDnControl([pin], [PUD_OFF, PUD_DOWN, PUD_UP])

به عنوان مثال :

pullUpDnControl(23, PUD_UP);

تاخیر در برنامه نویسی توسط دو تابع زیر ایجاد میشود .

delay([milliseconds])
delayMicroseconds([microseconds])

به عنوان مثال برای بدست آوردن تاخیر ۱ ثانیه ای میتوان بصورت زیر عمل کرد :

delay(1000)

برنامه نمونه به زبان C

#include<stdio.h>    // Used for printf() statements
#include<wiringPi.h> // Include WiringPi library!
 
// Pin number declarations. We're using the Broadcom chip pin numbers.
const int pwmPin = 18; // PWM LED - Broadcom pin 18, P1 pin 12
const int ledPin = 23; // Regular LED - Broadcom pin 23, P1 pin 16
const int butPin = 22; // Active-low button - Broadcom pin 22, P1 pin 15
 
const int pwmValue = 450; // Use this to set an LED brightness
 
int main(void)
{
    // Setup stuff:
    wiringPiSetupGpio(); // Initialize wiringPi -- using Broadcom pin numbers
 
    pinMode(pwmPin, PWM_OUTPUT); // Set PWM LED as PWM output
    pinMode(ledPin, OUTPUT);     // Set regular LED as output
    pinMode(butPin, INPUT);      // Set button as INPUT
    pullUpDnControl(butPin, PUD_UP); // Enable pull-up resistor on button
 
    printf("blinker is running! Press CTRL+C to quit.");
 
    // Loop (while(1)):
    while(1)
    {
        if (digitalRead(butPin)) // Button is released if this returns 1
        {
            pwmWrite(pwmPin, pwmValue); // PWM LED at bright setting
            digitalWrite(ledPin, LOW);     // Regular LED off
        }
        else // If digitalRead returns 0, button is pressed
        {
            pwmWrite(pwmPin, 1024 - pwmValue); // PWM LED at dim setting
            // Do some blinking on the ledPin:
            digitalWrite(ledPin, HIGH); // Turn LED ON
            delay(75); // Wait 75ms
            digitalWrite(ledPin, LOW); // Turn LED OFF
            delay(75); // Wait 75ms again
        }
    }
 
    return 0;
}

در برنامه فوق پایه های GPIO شماره ۱۸ برای PWM شماره ۲۳ برای یک LED دائم روشن و شماره ۲۲ برای یک کلید فشاری در نظر گرفته شده است . کلید و LED ها بین پایه ها و پایه زمین قرار میگیرند . در هنگام فشرده شدن کلید فشاری LED روشن ، خاموش ( کم نور ) میشود و LED خاموش بصورت چشمک زن روشن میشود .

منابع : این مطلب با نگاهی به سایت Sparkfun.com نوشته شده که توضیحات خوبی درباره برنامه نویسی به زبان C درش آورده شده .

سایت توسعه دهنده کتابخانه wiringPi هم مطالب بسیار خوبی داره و صد البته برای سورس کتابخانه گیتهاب توسعه دهنده پیشنهاد میشه .

GPIO Pinout برد رزبری پای رو میتونید با توجه به نوع بردی که دارید از اینترنت پیدا کنید .

خارج شدن از نظر

شروع به کار با AVR در لینوکس

تقریبا تمام دانشجوهای مهندسی برق ، و علاقمندان الکترونیک حداقل یک بار در طول زندگیشون سراغ استفاده از میکرو رفته اند . سالها قبل میکرو های ۸۰۵۱ بسیار مورد استفاده قرار میگرفتند ، از حدود ۱۰ ۱۲ سال پیش میکرو های AVR جای ۸۰۵۱ رو در بین پروژه های دانشجویی گرفتند و از حدود ۵ ۶ سال پیش هم خانواده ARM محبوبیت دوچندانی پیدا کردند . اما هنوز هم تعداد زیادی از پروژه های صنعتی قدیمی تر مبتنی بر ۸۰۵۱ و AVR وجود دارند و همچنان پروژه های زیادی براساس AVR توسعه داده میشوند .

برای راه اندازی پروژه «میکروکنترلری» خودمان در لینوکس ، من میکروی AVR را انتخاب کرده ام . برنامه ها همگی از مخازن قابل به رایگان قابل دریافت هستند .برای شروع به کار تنها به یک پروگرمر استاندارد ( اصلا قدیمی بودن پروگرمر مهم نیست ) که در محیط ویندوز به درستی کار کند ،نیاز داریم . مدار الکترونیکی به دلخواه طراح هر چیزی میتواند باشد که من بحثی بر روی آن ندارم . این نوشته تنها درباره برنامه ریزی میکرو و روش آن در لینوکس است .

ابتدا به یک برنامه ادیتور احتیاج داریم .با اینکه vim ویرایشگر محبوب خیلی ها ( من جمله من) است شاید خیلی های دیگه علاقه ای به استفاده از vim نداشته باشند . از هر ویرایشگر متنی مثل nano یا gedit یا هر چیز دیگه ای که خودتان تشخیص میدهید نوشتن کدها در آن راحت تر است استفاده کنید .

برنامه هایی که برای کامپایل و آپلود کردن فایل HEX برنامه بر روی میکرو احتیاج داریم به راحتی از مخازن نصب میشوند :

sudo apt-get update
sudo apt-get install avr-gcc avr-libc avrdude

در آرچ لینوکس هم به صورت زیر :

sudo pacman -Syu
sudo pacman -S avr-gcc avr-libc avrdude

در صورتیکه از پروگرمرهای USB استفاده نمیکنید و از پروگرمر دست ساز پورت سریال یا LPT استفاده میکنید احتیاج به برنامه uisp دارید . میتوانید با استفاده از مخازن این برنامه را هم نصب کنید .

نوشتن یک برنامه ساده

برنامه ساده main.c پورت D را به خروجی تبدیل کرده و هر ۱۰۰ میلی ثانیه یکبار وضعیت پورت را عوض میکند .

#include <avr/io.h>
#include <util/delay.h>
 
int main (void)
{
 DDRD = 255; // MAKE ALL PORT D PINS OUTPUTS
 
 while(1) {
  PORTD = 255;
    _delay_ms(100); // LED ON
  PORTD = 0;
    _delay_ms(100); // LED OFF
 }
 
 return 0;
}

کامپایل کردن برنامه

avr-gcc -w -Os -DF_CPU=1200000UL -mmcu=atmega8 -c -o main.o main.c
avr-gcc -w -mmcu=atmega8 main.o -o main
avr-objcopy -O ihex -R .eeprom main main.hex

کامپایلر avr-gcc از برنامه نوشته شده ما فایل آبجکت میسازد .

با استفاده از سوئیچ w- میتوان warning های حین کامپایل را نادیده گرفت .

سوئیچ Os- سطح بهینه سازی کد را تعیین میکند .

با استفاده از DF_CPU- میتوان فرکانس کاری میکروکنترلر را تعیین کرد . و من در اینجا ۱۲ مگاهرتز در نظر گرفته ام .

نوع میکروکنترلر توسط سوئیچ mmcu- مشخص میشود . من در اینجا از میکروی مگا۸ استفاده کرده ام .

کلیدهای c- و o- مربوط به مشخصات فایل کامپایل شده میباشند . با استفاده از سوئیچ c- بدون استفاده از لینک کردن فایل سورس ما کامپایل خواهد شد .شکل نهایی هر فایل به صورت یک فایل آبجکت خواهد بود . با استفاده از کلید o- بجای یک فایل out.a کامپایلر یک فایل اجرایی میسازد.

برنامه avr-objcopy برای ساخت فایل باینری و کپی آن در حافظه استفاده میشود . این برنامه فایل های symbol و اطلاعات جانمایی مازاد را پاک کرده و یک فایل ابتدایی از اعداد باینری جهت بارگزاری در میکرو کنترلر میسازد . سوئیچ O- مشخص کننده فایل خروجی باینری ( به فرمت هگز) میباشد . کلید R- برای پاک کردن استفاده میشود ( برنامه قبلی را ازتمام حافظه eeprom پاک میکند . ) و در انتها فایل ما به فرمت Hex تحویل داده میشود .

بارگزاری فایل هگز بر روی میکرو

در آخرین مرحله ، فایل هگز ساخته شده بر روی میکرو کنترلر بارگزاری میشود .

ابتدا فیوزبیت ها با توجه به نیاز ما تنظیم میشوند . برای این کار میتوانیم با استفاده از سایت تنظیم فیوزبیتها اقدام به تنظیم فیوزبیتها کنیم . بعد از تنظیم فیوزبیتها این سایت مقادیر مناسب را برای برنامه avrdude نمایش میدهد . خروجی چیزی شبیه به این خواهد بود :

-U lfuse:w:0xe8:m -U hfuse:w:0xd9:m

فایل هگز به همراه تنظیمات فیوزبیتها به صورت زیر در میکرو پروگرم میشوند :

sudo avrdude -F -V -c usbasp -p m8 -P usb -U lfuse:w:0xe8:m -U hfuse:w:0xd9:m -U flash:w:main.hex

سوئیچ F- باعث میشود برنامه avrdude سعی در شناسایی نوع میکرو بکند . سوئیچ V- عملیات automatic verify check را در هنگام آپلود فایل در میکرو از کار می اندازد . سوئیچ c- نام پروگرمر ما را به برنامه معرفی میکند و p- نمایانگر پارت نامبر یا همان اسم میکرو میباشد .با استفاده از P- میتوان پورتی که از آن برای برنامه ریزی میکرو استفاده میکنیم معرفی کرد . و با استفاده از U- ابتدا فیوزبیتها و سپس فایل اصلی به فرمت هگز برای بارگزاری مشخص شده اند .

منابع :برای نوشتن این متن از این وبلاگ استفاده کردم . برای بدست آوردن اطلاعات بیشتر میتوانید به سایت LadyADA مراجعه کنید .لیست نام میکرو ها و نام اونها در برنامه avrDude رو ازسایت LadyADA میتونید ببینید . اطلاعات خوبی درباره آموزش AVR رو میتونید از سایت avr-tutorials بدست بیارید . برای داشتن یک راهنمای خوب از کامپایلر gcc اینجا مطالب خوبی پیدا میکنید . و در انتها میتونید ازاینجا درباره برنامه avr-objcopy هم اطلاعات خوبی کسب کنید .

خارج شدن از نظر

نصب Arch Linux

ویرایش پنجم زمستان ۹۸ :
بعد از ویرایش این آموزش باتوجه به اینکه دیگه آرچ نصب نکردم کاستی های این آموزش برام مشخص نشد. تا اینکه به دلایلی سیستم عامل Arch Linux ام رو پاک کردم و تصمیم گرفتم یک سیستم جدید که فقط برنامه های مورد نیازم روش نصب باشه و زیاد شلوغ نباشه تهیه کنم . به همین دلیل از اول اقدام به نصب آرچ کردم که با توجه به بعضی از مشکلات ویرایش قبلی این آموزش پاسخگوی اونها نبود. من تصمیم گرفتم ویرایش جدیدی به همراه تغییرات جدید آرچ لینوکس تهیه کنم. امیدوارم مفید واقع بشه.

این یک راهنمای مینیمال برای نصب «Arch Linux» هستش . توی اینترنت راهنماهای زیادی هست ، هر کسی با توجه به نیازی که داشته برای خودش یا برای بقیه یک راهنما نوشته . من هم با توجه به چیزهایی که میخوام نصب کنم این راهنما رو مینویسم . و صد البته که قسمت عمده ای ازش با بقیه مشترک خواهد بود .

تهییه فایل iso.
من فرض کردم شما یک ایزوی سالم  و جدید از سایت ArchLinux در اختیار دارید.برای رایت ایزو بر روی دی وی دی یا بوتیبل سازی فلش طبق مسیر زیر اقدام کنید.

در لینوکس:
باز هم من فرض کرده ام شما آشنایی مقدماتی با دستورات خط فرمان و شناسایی دیوایس ها در لینوکس و … دارید . معمولا فرد ناآشنا با لینوکس برای اولین بار سراغ آرچ لینوکس نمیاد و این آموزش برای افراد آشنا با ساختار لینوکس و خط فرمان مفید خواهد بود.

به راحتی با استفاده از خط فرمان و دستور قدرتمند dd میتوان نسبت به تهییه یک سی‌دی یا فلش بوتیبل اقدام کرد :

با دستور زیر میتونیم اون رو روی دی وی دی موجود بر روی اپتیک درایو رایت کنیم :

sudo dd if=/path_to_arch_.iso of=/device-name

پس از اجرای این دستور ، تا اتمام عملیات نوشتن ایزو بر روی فلش یا سی دی در ترمینال هیچ خروجی مشاهده نمیشود . بعد از اتمام عملیات نوشتن ( رایت ) ایزو ترمینال به حالت طبیعی باز میگردد .

در ویندوز :

با استفاده از نرم افزار unetbootin میتوان اقدام به رایت ایزو نمود .

بعد از رایت شدن میتونیم سیستم رو راه اندازی مجدد کنیم .

اتصال به اینترنت

بعد از بوت شدن سیستم . در ابتدای فرآیند نصب اتصال به اینترنت را چک میکنیم:

ping -c3 www.google.com

دستور بالا سایت گوگل را ۳ بار پینگ میکند که در صورت عدم اتصال متوجه خواهیم شد .

البته اولویت با اتصال به اینترنت توسط کابل لن میباشد.

در صورت استفاده از مودم وایرلس یا استفاده از Wifi میتوان بصورت زیر به اینترنت متصل شد :

wifi-menu

دستور فوق اتصال وای‌فای را چک کرده و اقدام به اتصال مینماید .

نوع پارتیشن بندی

دو نوع جدول پارتیشن برای نصب در اختیار ماست . استفاده از سیستم مدرن GPT یا استفاده از سیستم قدیمی تر MBR . در صورتیکه سیستم شما از UEFI پشتیبانی میکند تنها انتخاب شما استفاده از سیستم بوت UEFI به همراه پارتیشن بندی GPT میباشد. در غیر اینصورت از هر دو سیستم پارتیشن بندی MBR یا GPT میتوان استفاده کرد . در اینجا ما نصب آرچ لینوکس بر روی هر دو نوع سیستم را آموزش میدهیم.

برای پارتیشن بندی ، در صورت استفاده از GPT از برنامه cgdisk و در صورت استفاده از MBR از برنامه cfdisk استفاده میشود .

ابتدا با برنامه lsblk اسم پارتیشن مورد نظر برای نصب را پیدا میکنیم .

sda      8:0    0 119.2G  0 disk
├─sda1   8:1    0  119.2G  0 part
sde      8:64   0 931.5G  0 disk
└─sde1   8:65   0 931.5G  0 part

پارتیشن بندی MBR:

فرض میکنیم تنها سیستم عامل کامپیوتر ما فقط ArchLinux خواهد بود. در این حالت بصورت زیر عمل میکنیم:

فرض کنیم قصد نصب Arch در درایو sda را داریم :

cfdisk /dev/sda

ابتدا پارتیشن روت .سپس swap و در انتها پارتیشن home را میسازیم .
بعضی از علما استفاده از یک پارتیشن مجزا برای var/ را پیشنهاد میدهند که در صورت تمایل میتوانیم این پارتیشن را هم بسازیم .

New > Enter
Partition Size > 40G
Primary or Extended > Select Primary
Bootable > Enter
Write > Enter > Yes

بعد از ساخت روت swap را میسازیم :

New > Enter
Partition Size > 4G
Primary or Extended > Select Primary (or extended, if you are going to create more than 3 partitions on this hard drive)
Write > Enter > Yes

سپس در صورت علاقه میتوانیم پارتیشن home/ را بسازیم . در غیر اینصورت پارتیشن home/ از فضایی که برای root/ در نظر گرفته ایم استفاده میکند.

بعد از ساخت پارتیشن ها ،آنها را فرمت میکنیم، فرض میکنیم پارتیشن root/ در آدرس dev/sda8/ قرار دارد .

# mkfs.ext4 /dev/sda8

از سیستم فایل ext4 برای پارتیشن روت استفاده کردیم .

فرض میکنیم swap در dev/sda5/ قرار دارد. با استفاده از دستور زیر این پارتیشن را به swap تخصیص داده و فعال میکنیم . در صورتیکه یک پارتیشن swap در سیستم شما از قبل موجود است، نیازی به تخصیص پارتیشن به سیستم فایل swap نمیباشد و تنها باید نسبت به فعال سازی swap اقدام کنید.

# mkswap /dev/sda5
# swapon /dev/sda5

در صورت علاقه میتوان یک پارتیشن مجزا برای boot/ با حداقل حجم ۲۵۶ مگابایت ساخت .

در صورتیکه بخواهید از بوت دوگانه به همراه ویندوز یا چندگانه استفاده کنید بصورت زیر عمل کنید:
ابتدا به مقدار موردنیاز خود فضای خالی درنظر بگیرید،حداقل ۲۰ گیگابایت برای پارتیشن root و حداقل به اندازه رم سیستم برای swap و مقدار دلخواه برای پارتیشن home. درصورتیکه بجای HDD از SSD استفاده میکنید یا حافظه سیستم شما بیشتر از ۸ گیگابایت میباشد،احتیاجی به پارتیشن Swap ندارید.
من از ۱۷۰ گیگابایت فضای پارتیشن بندی نشده برروی سیستمم استفاده کردم . ابتدا یک پارتیشن ۱۷۰ گیگابایتی از نوع extended میسازیم . سپس از فضای خالی پارتیشن extended پارتیشن های root ,swap و home را میسازیم.در انتها پارتیشن root ( در صورتیکه اقدام به ساخت پارتیشن boot مجزا کرده اید پارتیشن boot) را بوتیبل میکنیم و برای اعمال تغییرات write را میزنیم.

نصب در حالت UEFI و پارتیشن بندی GPT

برای نصب سیستم UEFI لازم است در مرحله بوت ، بوت حتما در حالت UEFI انتخاب شود در غیر این صورت پس از اتمام عملیات نصب سیستم شما قابل دسترسی نیست.

پس از تست اتصال به اینترنت با دستور ping ، با استفاده از دستور lsblk میتوان پارتیشن های موجود را دید. با استفاده از دستور زیر میتوانیم پارتیشن های لازم برای نصب آرچ لینوکس را بسازیم.

cfdisk /dev/sda

در صورتیکه از ویندوز ۱۰ در کنار آرچ لینوکس استفاده میکنید، نقشه حافظه اختصاص داده شده به ویندوز و بوت آن بصورت زیرمیباشد(پارتیشن ویندوز سیستم من ۲۴۳ گیگابایت ظرفیت دارد.):

Recovery	sda1	500 MB	ntfs
EFI System	sda2	100 MB	vfat
Reserved	sda3	16 MB	
Windows 10	sda4	243 GB	ntfs

با استفاده از دستور cfdisk پارتیشن های زیر را میسازیم:

۵۰۰ مگابایت با فایل سیستم EFI system

مابقی حافظه به پارتیشن root اختصاص میابد . و از نوع Linux filesystem انتخاب میشود. در صورتیکه شما تمایل داشته باشید میتوانید از پارتیشن home/ جداگانه استفاده نمایید.

در صورتیکه از بوت دوگانه به همراه ویندوز استفاده میکنید، حتما یک حافظه به حجم ۱ مگابایت از نوع Bios boot اختصاص دهید . در غیر اینصورت بعد از اتمام عملیات نصب سیستم شما بوت نخواهد شد. در صورتیکه قصد استفاده همزمان از ویندوز در کنار لینوکس خود ندارید از این مرحله صرف نظر کنید.

پارتیشن بندی سیستم من بعد از اتمام کار بصورت زیر میباشد:

مابقی مراحل نصب بین سیستم قدیمی و سیستم UEFI مشترک میباشد:

ماونت کردن پارتیشن ها

بعد از ساخت و فرمت کردن پارتیشن ها نوبت به ماونت کردن پارتیشن ها میرسد . برای ماونت کردن از دستورات زیر استفاده میکنیم :

ماونت کردن root/ ( پارتیشن روت سیستم من در sda8 قرار دارد .):

# mount /dev/sda8 /mnt

در صورتیکه از پارتیشن home/ مجزا استفاده میکنید میتوانید آن را بصورت زیر ماونت کنید ( پارتیشن home/ سیستم من در sda9 قرار دارد.) :

mkdir /mnt/home
mount /dev/sda9 /mnt/home

در صورتیکه پارتیشن مجزا برای var/ ساختید ، به صورت بالا ابتدا یک Mount Point در mnt/ در نظر گرفته و سپس اقدام به مونت کردن پارتیشن var/ بنمایید .

همچنین میتوان یک پارتیشن مجزا برای boot/ نیز در نظر گرفت و به صورت فوق بعد از مونت پارتیشن / اقدام به ساخت mount point در mnt/ نموده و این پارتیشن ها را مونت نمود .

انتخاب سایت های Mirror

قبل از نصب بسته های اولیه باید سایت های میرور را برای نصب انتخاب و فایل زیر را ویرایش کنیم ، از دو روش میتوان دست به Rank کردن سایت های میرور کرد ، روش اول استفاده از برنامه reflector برای Rank کردن سایتهاست و روش دوم روش دستی میباشد . از یکی از این روش ها برای رنک کردن سایتهای میرور استفاده کنید تا سرعت دانلود بسته ها برای شما افزایش یابد .

روش اول استفاده از reflector

ابتدا برنامه را توسط دستور pacman -S نصب میکنیم :

pacman -Syy
pacman -S reflector

سپس از mirror list بکاپ میگیریم:

cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak

در انتها توسط برنامه reflector سایتها را رنک میکنیم :

reflector -c "IR" -f 12 -l 10 -n 12 --save /etc/pacman.d/mirrorlist

روش دوم Rank کردن دستی سایتهای Mirror list :

# nano /etc/pacman.d/mirrorlist

ابتدا خط مورد نظر را انتخاب کرده و در بالای لیست قرار میدهیم .برای این منظور با استفاده از Ctrl+w کلمه iran را جستجو میکنیم و با کلید های alt+6 خط مورد نظر کپی شده و با زدنctrl+u در ابتدای فایل mirrorlist پیست میشود .برای پیدا کردن بقیه میرورهای کشور ایران از Alt+w استفاده میکنیم و سایتهای میرور را در ابتدای فایل لیست میکنیم.

نصب بسته های اولیه

در این مرحله بسته های base که بسته های ضروری برای ایجاد سیستم جدید هستند و بسته های base-devel که بسته های لازم برای برنامه نویسی و توسعه سیستم هستند ، همچنین کرنل لینوکس نصب میشوند:

# pacstrap -i /mnt base base-devel linux linux-firmware

بسته های پیشنهادی به صورت پیش فرض نصب خواهند شد . در صورتیکه علاقه ای به نصب بعضی از بسته ها ندارید ، مثلا هم ویرایشگر nano و هم vi در این مرحله نصب میشوند، و ما به دلایلی علاقه ای به نصب vi نداریم میتوانیم بااضافه کردن یک – جلوی عدد پکیج مورد نظر از نصب آن در این مرحله جلوگیری کنیم . (البته ویرایشگر nano جدیدا در نصب بسته های base نصب نمیشود و باید بصورت دستی توسط pacman نصب شود. یا کد بالا بصورت زیر اصلاح شود)

pacstrap /mnt base base-devel linux linux-firmware nano

در صورتیکه در حین فرایند نصب دچار وقفه و اختلالی شده اید، بدون نگرانی دستور بالا را دوباره تکرار کنید تا ادامه دانلود صورت بگیرد.

بعد از نصب باید فایل fstab را بسازیم :

ساختfstab

فایل fstab برای معرفی اینکه کدام پارتیشن‌ها باید به فایل‌سیستم مونت شوند بکار می‌رود .

genfstab -U -p /mnt >> /mnt/etc/fstab

برپا ساختن سیستم جدید توسط chroot

# arch-chroot /mnt

تنظیم زبان و مکان محلی

# nano /etc/locale.gen

عبارت en_US.UTF-8 UTF-8 مربوط به زبان انگلیسی ، همچنین عبارت مربوط به زبان فارسی رو از کامنت خارج میکنیم و دستورات زیر را میزنیم

# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8

تنظیم زمان محلی

# ln -sf /usr/share/zoneinfo/Asia/Tehran /etc/localtime

تنظیم ساعت سیستم

# hwclock --systohc --utc

تعیین host name

برای داشتن نام دلخواه سیستم خودتان میتوان دستور زیر را استفاده کرد ( این دستور نام کامپیوتر را به sys_name تغییر میدهد ):

# echo sys_name > /etc/hostname

پیکربندی مخازن

در صورت نصب سیستم عامل ۶۴ بیتی نیاز به مخازن multi Lib خواهیم داشت . برای این منظور فایل pacman.conf را با نرم افزار nano باز میکنیم :

# nano /etc/pacman.conf

سپس به پایین اسکرول کرده و خطوط زیر را uncomment میکنیم :

[multilib]
Include = /etc/pacman.d/mirrorlist

با قرار دادن خطوط زیر در انتهای فایل pacman.conf میتوان مخازن فرانسه را اضافه کرد :

[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch

در نهایت فایل را ذخیره کرده و خارج میشویم . با دستور زیر مخازن را آپیدت میکنیم :

#sudo pacman -Sy

پیکربندی حساب کاربری

ابتدا برای کاربر root یک پسورد در نظر میگیریم :

# passwd

سپس یک کاربر جدید بنام ali تعریف میکنیم :

# useradd -m -g users -G wheel,storage,power -s /bin/bash ali

در انتها برای کاربر ali پسورد تعیین میکنیم:

#passwd ali

برای اینکه بتوان کارهای مربوط به کاربر root را بدون وارد شدن به حساب root انجام داد ، برنامه sudo را ویرایش میکنیم :

# EDITOR=nano visudo

خط زیر را uncomment میکنیم :

%wheel ALL=(ALL) ALL

نصب بسته auto-complete برروی bash

# pacman -S bash-completion

نصب بوت لودر گراب برای سیستم MBR

اگر بجز آرچ از سیستم عامل دیگری نیز استفاده میشود . ابتدا بسته زیر را نصب میکنیم :

#pacman -S os-prober

سپس گراب را نصب میکنیم :

# pacman -S grub
# grub-install --recheck /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg

نصب بوت لودر گراب برای سیستم GPT

ابتدا بسته های زیر را نصب میکنیم :

pacman -S grub efibootmgr

یک دایرکتوری برای ماونت کردن پارتیشن EFI میسازیم :

mkdir /boot/efi

حال پارتیشن ۵۰۰ مگابایتی EFI system را ماونت میکنیم ، ( در سیستم من dev/sda7/ قرار دارد) :

mount /dev/sda7 /boot/efi

گراب بصورت زیر نصب میشود :

grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi
grub-mkconfig -o /boot/grub/grub.cfg

در انتها برای اطمینان از اتصال به اینترنت بعد از ریبوت سیستم جدید بسته زیر را نصب میکنیم :

pacman -S networkmanager
systemctl enable NetworkManager.service

بعد از نصب سیستم عامل برای نصب گرافیک از بسته ای زیر استفاده میکنیم :

pacman -S xorg xorg-server

نصب Gnome

برای نصب Gnome از دستورات زیر استفاده میکنیم . میتوان هر مدیر پنجره را بکار برد اما مدیر پنجره gdm پیشنهاد میشود:

pacman -S gnome
systemctl start gdm.service
systemctl enable gdm.service

نصب XFCE

sudo pacman -S lxdm
sudo pacman -S xfce4 xfce4-goodies
systemctl enable lxdm.service

نصب KDE

sudo pacman -S kde
systemctl enable kdm.service
pacman -S kdeplasma-applets-plasma-nm
pacman -S alsa-utils pulseaudio kdemultimedia-kmix

در انتها از مد ch-root خارج میشویم ، پارتیشن ها را Unmount میکنیم و سیستم را ریست میکنیم:

# exit
# umount -R /mnt
# reboot

پس از نصب

برای اینکه بتوانیم به پارتیشن های ویندوزی دسترسی داشته باشیم باید بسته زیر را نصب کنیم:

sudo pacman -S ntfs-3g

در صورتیکه از بوت دوگانه یا چندگانه به همراه سیستم عامل ویندوز استفاده میکنید، در این مرحله دوباره گراب را آپدیت میکنیم تا سیستم عامل مقیم در حافظه ntfs هم شناسایی شود و به گراب اضافه شود:

در سیستم Legacy:

# grub-install --recheck /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg

در سیستم UEFI:

grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi
grub-mkconfig -o /boot/grub/grub.cfg

خارج شدن از نظر