دوستی با محصول جدید اتودسک

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

شرکت اتودسک که پیش تر با محصولاتی مثل اتوکد و مایا شناخته شده بود، الان اومده محصولی به اسم 123D Circuits رو ارائه کرده که با ساختن یک اکانت و عضویت درش، میتونید به راحتی آزمایشات الکترونیکی خودتون رو انجام بدید.

این هم نمونه مداری که بستم، یک آی سی 7408 هست که داره دو ورودی رو با هم AND میکنه :

کافیه روی start simulation کلیک کنید و بعد با کلید ها بازی کنید تا تغییرات توی ولت متر و LED قرمز رنگ روی برد بورد رو شاهد باشید.

FacebookTwitterGoogle+Share

نوشتن یک سیستم عامل ساده – قسمت اول

همونطور که در جریانید، مدتهای زیادی بود که من دنبال ساخت یک سیستم عامل بودم. خب ساخت سیستم عامل دانش بالایی میخواد. حداقلش اینه که باید بدونیم چی میخوایم! ولی اگر صرفا برای فان بخوایم چنین کاری کنیم، میتونیم یک سیستم عامل خیلی ساده بنویسیم و اگر احتمالا یه کامپیوتر قدیمی و داغون داریم، روی اون نصبش کنیم.

خب، بیاید اول ببینیم چی نیاز داریم؟ اول از همه نیاز داریم که اسمبلی بلد باشیم. احتمالا با گشتن توی اینترنت کلی جزوه و کتاب و آموزش اسمبلی پیدا میکنید، همچنین اگر درس زبان ماشین پاس کرده باشید خیلی راحتتره کارتون، چون ایده کلی رو دارید. و البته مهم تر از اون، اینه که لینوکس و برنامه نویسی هم بدونید. اگر هم لینوکس بلد نیستید سعی کنید یاد بگیرید چون یکی از بهترین محیط های این کار به حساب میاد و اگر توی فروم هایی مثل OSDev بچرخید خواهید دید که اکثر توسعه دهندگان از لینوکس استفاده کردند، حتی اونایی که با سی شارپ یا MASM کار رو انجام داده بودن 😀 . دلیل عمده استفادشون از لینوکس (یا هر چیز شبه یونیکسی) وجود ابزارهای خوب توسعه روی این دسته از سیستم عامل هاست. همچنین خیلی از ایده هایی که شما بهش فکر میکنید رو قبلا روی این سیستم عاملها آزمایش کردند و ساختند که یا آزادند و یا نمونه های آزاد دارند.

خیلی خوب، بذارید اول ببینیم چه چیزهایی باید نصب کنیم؟

  1. یک ادیتور متنی، که معمولا همراه سیستم عاملتون نصب میشه. من خودم از nano و gedit و atom استفاده میکنم، و توصیه میکنم شما هم یکی از این ادیتورهای ساده رو انتخاب کنید تا درگیر پیچیدگی های vim و … نشید.
  2. یک اسمبلر که من اینجا از nasm استفاده میکنم، و nasm توی مخازن اوبونتو و دبیان و … موجوده. اگر هم نبود هم باینری و هم سورسش موجوده.
  3. یک مجازی فوق العاده ساده هم نیاز داریم. در واقع مجازی سازی که برای راه انداختن و بوت کردن یه باینری ساده، اذیتمون نکنه. من از qemu استفاده میکنم. حالا شما میتونید از bochs یا VirtualBox یا هرچیز دیگری استفاده کنید  و انتخاب خودتونه.

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

الان کافیه که با اراده قوی، یک فایل به اسم my16bitos.asm باز کنید و شروع کنید کد زدن. خب باید چی بنویسیم؟ یکی از نکات مهمی که اینجا هست اینه که ما نمیتونیم از روتین ها یا وقفه های سیستم عامل استفاده کنیم و نیاز داریم از بایوس استفاده کنیم! دقیقا چون بایوس MBR رو میخونه و از این داستانا که موقع بوت شدن داریم. پس کد ما چنین چیزی میشه :

کد   
MOV AH, 0x0e
MOV AL, 'A'
INT 0x10
JMP $
times 510-($-$$) db 0
DW 0xaa55

خب این شد کد ما. در واقع ما یک سیستم عامل (یا بهتر بگم بوت سکتور) ۱۶ بیتی نوشتیم. که البته این خیلی سادست و در قسمت بعدی پیچیده ترش خواهیم کرد. این سیستم عامل ۶ خطی (شاید به خاطر پیشرفت علوم کامپیوتر و اسمبلر ها و پردازنده ها، الان این کد شش خطه، و ممکن بوده زمانی یه مهندس کامپیوتر یا صرفا یک علاقمند به علوم رایانه رویاش نوشتن چنین چیزی بوده!)، وقتی بوت شه حرف A رو به ما نمایش میده. حالا با چه اتفاقاتی؟

خط اول که میگه عدد شانزده شانزدهی 0x0e رو در هشت بیت بالایی رجیستر AX قرار بده، یکی از روتین های بایوسه. در واقع بایوس میفهمه که بوت سکتور، این برنامه ست. خط دوم میگه کرکتر A رو در هشت بیت پایینی همون رجیستر قرار بده. در خط سوم ما یک وقفه (توجه کنید INT توی اسمبلی مخفف Interrupt یا «وقفه» است نه Integer .) ایجاد کردیم. وقفه 0x10 در بایوس برای نمایش کرکتر ها به کار میره (البته توی روتین 0x0e). در خط چهارم با استفاده از دستور پرش، برنامه رو تا ابد باز نگه داشتیم، که وقتی سیستم عامل بوت میشه همچنان روشن بمونه. یکی از سخت ترین خط ها از نظر درک، خط پنجمه. خط پنجم چی کار میکنه؟ ۵۱۰ بایت اول دیسک (این سیستم عامل میتونه از روی یک فلاپی یا هارد دیسک یا هر دیوایس دیگری بوت شه) رو با صفر پر میکنه و حالا چرا؟ چون ما میخوایم در دوبایت نهایی، عدد جادویی 0xaa55 رو قرار بدیم که بوت سیستم عامل بهش وابسته است.

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

کد   
nasm -f bin -o my16bitos.bin my16bitos.asm

اکنون در دایرکتوری جاریتون، باید فایل my16bitos.bin رو ببینید. کافیه تا با qemu اجراش کنید به این شکل :

کد   
qemu-system-i386 my16bitos.bin

پس از اجرای دستور و باز شدن پنجره مربوط به QEMU ، و نمایش اطلاعات مربوط به QEMU ، شاهد نمایش حرف A خواهید بود. تبریک میگم! این اولین تلاش شما برای ساخت یک سیستم عامله! در قسمت بعدی این سیستم عامل رو کامل تر میکنیم تا بتونه یه سری اطلاعات رو از کاربر بخونه و جواب بده.

پس تا مطلب بعدی خداحافظ!

FacebookTwitterGoogle+Share

استفاده از اسمبلر MASM روی لینوکس

اگر شما هم هم رشته من باشید و زبان ماشین برداشته باشید، به احتمال بسیار بسیار بالا استاد این درس، کدهایی بهتون میده که با MASM اسمبل میشن، و طبیعتا شما ناراحت خواهید شد که چرا این اسمبلر نسخه لینوکسی نداره و … 😀 . و جالبه بدونید راهی که توی این پست به شما ارائه میکنم، نه تنها برای لینوکس و سیستم عاملهای غیر از ویندوز، بلکه روی ویندوز ۶۴ بیتی هم باید اجرا بشه.

اولین چیزی که نیاز دارید، این هست که یک ایمولاتور برای شبیه سازی محیط سیستم عامل قدیمی DOS تهیه کنید. برای ویندوز و لینوکس و BSD ها و … ، نرم افزاری ارائه شده به اسم DOSBox که محیط داس رو شبیه سازی میکنه. توی اوبونتو/دبین با این دستور نصب میشه :

کد   
sudo apt-get install dosbox

سپس، شما نیاز به دانلود اسمبلر MASM دارید که میتونید از اینجا دانلودش کنید.

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

کد   
mount f ~/masm
f:

دستور mount پوشه ای که آدرسش را به عنوان ورودی دریافت کرده را درون یک درایو مجازی به نام F سوار میکند و با دستور بعدی، به آن درایو مجازی میرویم. (توجه کنید که پوشه MASM در پوشه خانگی قرار داده شده است. چنانچه در آدرس دیگری قرار داده اید باید مسیر را عوض کنید)

حالا میتوانید با اجرای MASM.EXE یا ML.EXE ، کدی که به زبان اسمبلی نوشته اید را اسمبل کنید.

موفق باشید :)

 

FacebookTwitterGoogle+Share

ساخت توزیع لینوکس غیرمستقل بدون نیاز به اسکریپت

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

کد   
(CD ROOT)
|-------+casper
|	|-------filesystem.${FORMAT}	
|	|-------filesystem.manifest
|	|-------filesystem.manifest-desktop
|	|-------vmlinuz
|	|-------initrd.img
|
|-------+boot
|	|--------+grub
|	|	 |--------grub.cfg
|	|
|	|-------memtest86+
|
|--------md5sum.txt

 

توی دیسک اوبونتو، همه چیز به شکل بالا چیده شده! همه برنامه ها و کتابخانه ها (و به طور کلی کل سیستم عامل) داخل پوشه کسپر قرار دارند، و همچنین ملزومات بوت شدن سیستم عامل، توی boot . برای لایو بوت شدن هم از تکنولوژی AuFS استفاده میشه (بعدا در موردش مطلبی خواهم نوشت). اما اگر بخوایم ریز تر شیم، بازهم بهتره به توضیحاتی که سازنده های اوبونتو دادن توجه کنیم :

کد   
/casper/filesystem.${FORMAT}: This is the container of the linux filesystem we are going to copy from our harddisk. It is usually a compressed filesystem like squahsfs.
 
 
 
    /casper/filesystem.manifest: This file is optional. You only need it if you decide to include the Ubuntu installer in the CD. The purpose of this file will be explained later.
 
 
 
    /casper/filesystem.manifest-desktop: This file is optional. You only need it if you decide to include the Ubuntu installer in the CD. The purpose of this file will be explained later.
 
 
 
    /casper/vmlinuz: The linux kernel. This is copied form the linux filesystem.
 
 
 
    /casper/initrd.img: the initramfs that contain the customizations necessary for the live CD/DVD.
 
 
 
    /boot/grub/grub.cfg: File containing boot options for the live CD/DVD.
 
 
 
    /boot/memtest86+: Optional file used to test the RAM of the machine form the live CD/DVD.
 
 
 
    /md5sum.txt: Optional file containing checksums for all the files in the CD.

پس اسکریپت هایی که برای «ریمسترینگ» استفاده میشن، این کارها رو میکنند و چنین برنچی رو برای ما میسازند. خب برای ساخت چنین چیزی باید چه کار کنیم؟ قبل تر در مورد ساخت توزیع مطلب نسبتا زیادی نوشتم، چه تو وبلاگ قبلی که روی بلاگفا بود و چه توی این وبلاگ. اما اگر واقعا میخواید کار مشابه اسکریپتی مثل ReLinux انجام بدید، به این لینک سر بزنید.

این روش روی چه توزیع هایی کار میده؟!

این هم سوال بسیار خوبیه، میشه گفت هر توزیعی که ساختار مشابه اوبونتو داشته باشه. حتی اگر شما بخواید توزیعی بر مبنای آرچ لینوکس ارائه بدید، میتونید ازش استفاده کنید، ولی احتمالا زحمت زیادی خواهد داشت براتون. اگر توزیع مبدا ساختار مشابه نداشته باشه، احتمالا نتونید چنین توزیعی ازش بیرون بکشید ولی اگر تونستید هم به احتمال بسیار قوی توزیع جدید ساختار تازه ‌ای ارائه خواهد کرد. به زودی هم لینکی که دادم رو ترجمه میکنم :)

موفق باشید!

 

FacebookTwitterGoogle+Share

نخستین دیدار با تکشاخ کنونیکال

Screenshot from 2014-10-25 22:16:00

خب، نسخه ۱۴.۱۰ از سیستم عامل گنو/لینوکس، توزیع اوبونتو، که توزیع محبوب و مورد  استفاده من هست هم منتشر شد. نام این نسخه Utopic Unicorn یا «تکشاخ اتوپیایی» گذاشته شده. شاید چون قراره که اوبونتو در این نسخش، به اتوپیای خودش برسه، این نام رو براش انتخاب کردن.

در این نسخه، هسته 3.16 مورد استفاده قرار گرفته و طبق معمول، همه قطعات لپتاپ Lenovo G510 من رو شناخت، البته به جز کارت شبکه بی‌سیم که broadcam هست و درایورهای انحصاریش رو از مخازن نصب کردم و کار کرد و الان دارم این مطلب رو برای شما مینویسم. طبق عادت مالوف، در این میان چندین شات قرار میدم :

Screenshot from 2014-10-25 22:14:05

تصویر بالا، اولین سکانسی هست که هر اوبونتو کاری مشاهده میکنه!!! محیط اصلی یونیتی به اضافه والپیپر چند رنگ اوبونتو که تم بنفش داره :)

Screenshot from 2014-10-25 22:14:13خب، این صحنه هم آشناست، Dash که بعد از فشردن کلید سوپر (که روی اکثر کیبرد ها با لوگوی ویندوز مشخص شده) ، باز میشه و میتونید آخرین فایلها و اپلیکیشن های باز شده، موزیک ها، ویدئوها و … رو از این طریق ببینید.

Screenshot from 2014-10-25 22:14:36با این که عمدتا ترجیح میدم از ترمینال برای دانلود و نصب برنامه ها استفاده کنم، اما این هم مرکز نرم افزار محترم، یعنی همون Software Center هست که در تمامی نسخه های اوبونتو عمدتاً با همین شکل و قیافه ظاهر میشه.

Screenshot from 2014-10-25 22:15:18و در آخر، مرورگر فایرفاکس که ذهن زیبا رو باهاش باز کردم. این هم به نوبه خودش جالبه، نه؟! مرورگر فایرفاکس هم در اوبونتو، حق آب و گل داره و از ابتدا باهاش بوده. البته فایرفاکس در توزیع های دیگری هم مرورگر پیشفرض هست، اما اوبونتو و فایرفاکس دو یار دیرینه هستند.

در پایان، باید بگم که این نسخه هم در ابتدای امر بسیار خوب و روان اجرا شده و هیچ مشکلی برای شخص من نداره، فقط باید دوباره طبق معمول برم سراغ اوکی کردن بوت ویندوز ۸.۱ که همراه این سیستم عامل، روی لپتاپ Lenovo G510 من نصب شده. راستی، تا یادم نرفته بگم که با کلید های ترکیبی Super + Space میتونید زبان رو عوض کنید. سعی کردم به Alt + Shift تغییرش بدم، اما نشد.

موفق باشید :)

FacebookTwitterGoogle+Share

مدل تجاری نرم افزار آزاد

یکی از مهم ترین شبهاتی که در مورد نرم افزار آزاد هست، اینه که میتونه پولی باشه یا نه؟ اصولا چون همیشه لفظ Free برای نرم افزار آزاد استفاده میشه (شخصا بهتر میدونم Libre استفاده بشه)، خیلی از تازه کاران، تفکرشون این هست که این نرم افزارها، رایگان هم هستند. نرم افزارهای آزاد، معمولا رایگان هم هستن، چون اکثرشون رو که بررسی میکنیم، میرسیم به یک پروژه دانشجویی یا فقط یک پروژه برای تفریح!

اصلا نرم افزار آزاد چی هست؟

به نقل از ویکیپدیا :

نرم‌افزار آزاد (به انگلیسی: Free software) نرم‌افزاری است که به‌همراه کد منبع توزیع شده و با قوانینی منتشر می‌شود که آزادی استفاده، مطالعه، ویرایش و انتشار مجددِ کاربران را تضمین می‌کند.[۱][۲] نرم‌افزارهای آزاد معمولاً با همکاریبرنامه‌نویس‌های داوطلب به‌عنوان یک پروژه به‌وجود می‌آیند.

نرم‌افزارهای آزاد با نرم‌افزارهای مالکیتی (مانند مایکروسافت ویندوز) که آزادی کاربر در استفاده، مطالعه، ویرایش یا انتشار مجدد را در درجه‌های مختلف محدود می‌کنند، متفاوت است. این محدودیت‌ها با در نظر گرفتن مجازات‌هایی قانونی برای کاربرانی که قوانین آن‌ها را نقض می‌کنند، به‌وجود می‌آیند. نرم‌افزارهای مالکیتی عموماً به صورت بسته‌های اجراپذیرباینری و بدون دسترسی به کد منبع فروخته می‌شوند که جلوی ویرایش و وصله‌کردن نرم‌افزار توسط کاربر را می‌گیرد و او را برای به‌روزرسانی و پشتیبانی به شرکت نرم‌افزاری تولید کننده وابسته می‌کنند. نرم‌افزارهای آزاد از نرم‌افزاری‌های رایگان که برای استفاده، از کاربر پولی دریافت نمی‌کنند، نیز متفاوت‌اند. این نوع نرم‌افزارها نیز معمولاً تمامی حقوق نرم‌افزار را برای تولیدکنندهٔ آن محفوظ داشته و جلوی مهندسی معکوس، ویرایش و یا توزیع مجدد توسط کاربر را می‌گیرند.[۳] بنابراین موضوع اصلی نرم‌افزار آزاد، موضوع آزادی است و نه قیمت آن: کاربران آزادند که هر چه می‌خواهند با نرم‌افزار انجام دهند. این آزادی شامل انتشار مجدد نرم‌افزار به‌صورت رایگان و یا با سود نیز می‌شود.[۴] یعنی نرم‌افزار آزاد می‌تواند به صورت رایگان و یا در ازای دریافت مبلغی پول در اختیار کاربر قرار بگیرد.

خب این تعریف نرم افزار آزاد. خوشبختانه، ویکیپدیای فارسی در این زمینه هم بسیار خوب عمل میکنه، چرا که آزاد کارهای ایرانی یکی از بنیادی ترین ادیتورهای این دایرة المعارف آزاد هستند.

آیا میتونیم نرم افزار آزاد رو بفروشیم؟

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

آیا میشه یک فورک از یک نرم افزار آزاد رو تجاری کرد؟

از اونجا که مفهوم تجاری معمولا با مفهوم کدبسته یکی دونسته میشه، باید به مجوز نگاه کرد. اما فرض کنید من فایرفاکس رو ادیت کنم، و تعدادی فیچر بهش اضافه کنم. بدون تغییر مجوز بخوام به قیمت 5000 تومن بفروشمش، اینطوری میشه (البته باز هم باید به مجوز نگاه کرد). مثلا هسته لینوکس، یک نمونه بسیار کامل از نرم افزار آزاد هست که داره تجاری هم استفاده میشه. سیستم عاملی مثل آندروید، و یا حتی همین ردهت انترپرایز، دارند ازش به خوبی و خوشی استفاده میکنن.

درآمد نرم افزار آزاد چگونه هست و از چه راه هایی میشه درآمد کسب کرد؟

درامد شما، بسته به نوع نرم افزاری که ساختید، میتونه متغیر باشه. مثلا ممکنه یک نفر سالی یک ریال هم درنیاره، ولی کسی روزی صد هزار تومان، درامد خالصش از همین «نرم افزار آزاد» محترم باشه! اما عمده راه های کسب در آمد :

  • دونیشن
  • فروش پشتیبانی
  • فروش محصول بصورت فیزیکی

هستند.

من حرفم کاملا تموم شده، البته اینجا این بحث رو تموم نمیکنم و بعدها هم در موردش مینویسم.

FacebookTwitterGoogle+Share