با شه حتما .نت جان ممونم . که درک می کنی . اصغر جون از شما هم همینطور .
با شه حتما .نت جان ممونم . که درک می کنی . اصغر جون از شما هم همینطور .
گروه persinan_os در سایت google راه اندازی شد
آدرس:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اینکار به این دلیل صورت گرفت که نقاط تماس ما با بیرون بیشتر شود به این دلیل که خیلی ها اصلاً اسم p30world رو هم نشنیدند
در ضمن فایلهای شما هم رسید دوست عزیز لاو
فایل ترجمه مستر هم در دست بازسازی برای درآوردن بصورت pdf هست
یک طرح ساده هم دارم برای سایت میزنم.
با سلام من يكي از دوستان مستر هستم و تو كار تر جمه مي تونم كمكتون كنم.
شما هموني نيستيد كه دفعه قبل اعلام آمادگي كرديد و ازتون خبري نشد ؟با سلام من يكي از دوستان مستر هستم و تو كار تر جمه مي تونم كمكتون كنم.
ممنون نت جان
شما هم كار خوبي كرديد من كه هنوز بازديد نكردم ولي ممنون برم ببينم
طراحي سايت هم بهتر بشه كه عالي ميشه
سلام بچه ها . نه این یکی دیگه است . پسر خوبیه . فقط باید ببینم که ایا اینم مو قع کار جیم میزنه یا نه؟ انشاالله اینطور نیست .در مورد طراحی بهتر سایت هم موافقم .خیلی خوب می شه .
مستر جان فعلا دوستت با خودت كار (ترجمه) كنه تا بعد اگر ديديم ايشون ادامه دادن باشهسلام بچه ها . نه این یکی دیگه است . پسر خوبیه . فقط باید ببینم که ایا اینم مو قع کار جیم میزنه یا نه؟ انشاالله اینطور نیست .در مورد طراحی بهتر سایت هم موافقم .خیلی خوب می شه
در ضمن من با سه تن از دوستان صحبت كردم و هر سه قول همكاري در زمينه ترجمه دادند امدوارم اين دوستان جديد هم به گروه ما بپيوندند تا كار سريعتر پيش بره
ممنون
نوشتن يك كرنل ساده به زبان C همراه با توابع اصلي printf و clearscreen
ما در اين مقاله قصد داريم كه به شما نشون بديم نوشتن يك كرنل ساده هستش براي شروع كرنل ما در فايل Kernel_Start.asm هست.
اين يك كد 32 بيتي هست (به اين دستور توجه كنيد [BITS 32]) و كرنل ما تابع k_main هست كه در فايل C قرار داره. اما در فايل اسمبلي اين تابع رو _k_main صدا زديم ! دليلش اين هست كه كامپايلرهاي زبان C/C++ يك زيرخط در زمان كامپايل به اول اسم هر تابع اضافه مي كنند مگر قرار باشه كه بخوايد اين فايل رو به يك ELF لينك كنيد چون فايلهاي ELF نيازي به زير خط اول موقع فراخواني روالهاي سي (لينك) ندارند و مي توانيد تابع رو به همون صورتي كه در سي هست فراخواني كنند . بعد از فراخواني تابع k_main دستور عمل CLI اجرا مي شود . اين دستور عمل تمام وقفه ها رو غير فعال مي كنه و ديگه وقفه اي اتفاق نمي افتد . سپس دستور HLT اجرا مي شود اين دستور به CPU مي گويد اجرا كردن دستور عمل ها بعدي رو متوقف كن (بعد از اين دستور ديگه دستور عملي اجرا نميشه شايد با خودتون بگيد خوب اگر بخوايم دوباره فعال كنيم چطوري بايد اين كار رو كرد اجراي دوباره برنامه با استفاده از وقفها صورت مي گيرد اگر وقفه ها غير فعال باشند سيستم عملا هنگ مي كنه) ما ميتونيم به جاي HLT از دستور JMP $ نيز استفاده بكنيم اما اين دستور باعث ميشه كه سيكل هاي CPU به هدر بره و به CPU فشار بياد و داغ كنه چون به طور مرتب فقط به مكان خودش در حال پرش هست اما دستور عمل ما (HLT) اين كار رو نميكنه و واقعا CPU رو غير فعال مي كنه و هيچ دستور عملي رو اجرا نميكنه كه به سيستم فشار بياد .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نكته : وقفه ها ميتوانند CPU رو از حالت HLTدر بياورند اما چرا ما قبل از دستور عمل HLT وقفه ها غير فعال كرديم براي اين هست كه مي خواهيم سيستم كاملا از كار بيفته .
حالا اجازه بدهيد كه ما متغيير ها و توابع اصلي رو در فايل Kernel.c تعريف كنيم . توابع ما اينها هستند حال در ذيل به توضيح هر كدامشون مي پردازيم
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اين #define WHITE_TXT 0x07 هيچ كار خواصي انجام نميده. ما در جلوش گفتيم كه اين متغيير چه كار مي كنه فقط اين متغيير رو بياد داشته باشيد
حالا اجازه بدهيد كه ما به سمت تعريف تابع k_Kernel برويم .
تابع k_main نقطه ورود ما به كرنل خودمون هست. ما اين تابع رو در فايل اسمبلي Kernel_Start.asm صدا زده ايم .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تابع k_clear_screen كارش پاك كردن صحفه نمايش هست و تابع k_printf() هم كارش نمايش متن بر روي صحفه نمايش هستش .
پارامتر دوم تابع k_printf() كارش رسم متن بر روي خط مورد نظر هست (صفر خط اول , يك خط دوم ,دو خط سوم و الي آخر) و \n نيز همانند تابع printf در C/C++ كارش رفتن به خط جديد هست
هورا !
اين چطور بود براي شروع يك سيستم عامل ؟
در مود حفاظت شده شما نمي توانيد از وقفه ها بايوس براي پاك كردن صحفه نمايش استفاده كنيد به همين دليل ما براي خودمون يك تابع نوشتيم كه مستقيما به صحفه نمايش دسترس داره و صحفه رو پاك مي كند .
در تابع بالا (k_clear_screen) اشاره گر (vidmem) اشاره مي كنه به آدرس 0xB8000 كه آدرس صحفه نمايش در مود محافظت شده است . ما متغيير رو از نوع char (يك بايت) تعريف كرديم پس ما مي توانيم در هر لحظه يك بايت رو در حافظه صحفه نمايش بنويسيم مود متني در ريزپردازنده هاي سري X86 به طول و عرض 80 x 25 كاراكتر هست هر كاراكتر به دو بايت نياز داره بايت اول براي خود كاراكتر و بايت دوم نيز خاصيت كاراكتر رو كنترل مي كنه مثل رنگ و چشمك زن بودن كاراكتر رو مشخص مي كنه . ما با ضرب طول و عرض 80*25 مي توانيم مقدار كاراكتر هاي كه مي توانيم بر روي صحفه نمايش رسم كنيم رو بدست مي آوريم و ما اين عدد بدست آمده رو ضرب در2 مي كنيم ما در هر لحظه به يك بايت در صحفه نمايش دسترسي داريم و ما با استفاده از دستور vidmem[i]=' '; مي توانيم يك فاصله و يا هيچ كاراكتري چاپ نشه يا يك فضاي خالي ايجاد كنيم و ما عدد 1 رو به i (i++) اضافه مي كنيم و متغيير ما I دقيقا به اندازيه يك نقطه به جلو برده مي شود . حالا بايت بعدي خاصيت هست و ما در آن عدد 0x07 رو قرار مي دهيم . 0x07 تعيين مي كنه يك پشت زمينه سياه با رو زمينه (كاراكتر) سفيد و بدون چشمك زن در مود متني رسم شود .کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالاپيش به سوي تابع k_printf .
تابع printf_k خيلي شبيه تابع k_clear_screen كار ميكنه . while(*message!=0) اين حلقه ,كاراكترها رو مي خونه تا به پايان رشته برسه و دوباره تابع رو ادامه بده . خط if(*message=='\n') در رشته به دنبال كاراكتر \n مي گردد اگر اين كاراكتر رو پيدا كرد به خط جديد مي رود و كاراكتر بعدي در ابتداي خط بعدي چاپ مي شود . اگر كاراكتر ما يك \n نبود ما كاركتر رو در داخل حافظه صحفه نمايش قرار مي دهيم و خاصيت كاراكتر رو 0x07 قرار مي دهيم (پشت زمينه سياه و متن سفيد بدون حالت چشمك زن)کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كامپايل كردن كرنل
اول شما سورس كد كرنل رو دريافت كنيد و همچنين شما به اسمبلر (NASM) , كامپايلر C ( GCCيا DJGPP) و به يك لينكر (LD)نياز داريد .
حالا شما در بالاي فايل لينكر (link.ld) اين خط رو مي بينيد :
.text 0x100000
شما نياز داريد براي لود كردن كرنل به حافظه مورد نظر آدرسش رو به صورت هگزيمال بنويسيد در اين مورد محل مورد نظر 1MB است كه (در حالت هگزيمال مي شود 0x100000) در اينجا بايد كرنل بار شود
اول شما فايل اسمبلي تون رو كامپايل كنيد
قدم بعد و آخرين قدم هم لينك كردن دو فايل ks.o و kernel.o و تبديل كردنشون به يك فايل است در اين مورد ما نياز داريم كه فايل رو به فرمت بيناري (Binary) و حالات تخت (Flat) تبديل كنيم كه ما براي اين كار از فايل اسكريپتي (link.ld) كه براي اينكار (Link) ساختيم استفاده مي كنيم ما اين دو فايل رو با اين دستور به هم وصل مي كنيم :کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اين خيلي مهمه كه اول ks.o لينك بشه بعد kernel.o اگر شما اين دو فايل رو جا به جا لينك كنيد كرنل كار نخواهد كرد ! كرنل پس از بوت شدن و اجراي بوت لودر و رفتن به مد محافظت شده و فعال شدن A20 اجرا خواهد شده . اگر شما دوست داريد كه كرنل تون گراب (GRUB) داشته باشه شما مي تونيد گراپ رو از سايتش دانلود كنيد(به همون روشي كه در بالا گفته شده به برنامه تان لينك كنيد)کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نتيجه گيري
شما الان يك كرنل ساده داريد ! شايد شما يك تابع k_printf بهتري بخواهيد داشته باشيد شما مي تونيد از اين مثال استفاده كنيد و امكانات(%s , %d , %c و الي اخر ) بيشتري به تابع تون اضافه كنيد شما مي تونيد در آينده مثال هاي بهتري بنويسيد
نكته : شما قبل از اجرا كرنل بايد به مود محافظت شده برويد
///////////////////////////////////////////////////////////////////////
اين مقاله براي نت فرستاده شده كه به صورت PDF در بياوردش
Last edited by _LOVE_CODER_; 10-03-2006 at 15:47. دليل: بهم ريختگي
بچه ها به خدا شرمندم نتونستم مقاله رو اماده كنم سيستمم ويرزوسي شد مجب ور شدم كل هاردمو زيرو كنم حتي فرست بك اپ گيري هم نداشتم . الان يه سر به قسمت در خواست نرم افزار بزنيد متو جه ميشيد ببينيد مي تونيد كمنكم كنيد . شرمنده ام به خدا .
مشكلي نيست مستر جان شما تا آخر اين هفته مي توني تحويل بدي ؟
اره . می تونم . سپردم به رضا جون . کارش تا فردا احتما لا تمومه . منم دارم کل کل می کنم با این سیستم نفتیم ببینم چیطوری از دست این ویروسه می تونم خلاص بشم .
Last edited by Master; 12-03-2006 at 14:51.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)