# برنامه نویسی سطح پایین > توسعه‌ی هسته‌ی سیستم عامل >  برنامه نویسی سوکت تحت سیستم عامل MS-DOS

## mehrdad254

با سلام خدمت دوستان

من برای گسترش یک پروژه  می خواستم  اطلاعات ارسالی رو از طریق پورت Rj45  به یک میکرو کنترلر ARM بفرستم . منتها این پروژه تحت سیستم عامل DOS  و به  زبان C انجام شده بود و انجام دوباره تمام پروژه در ویندوز به دلایل  امنیتی و .. امکان پذیر نیست.
 می خواستم ببینم آیا درایور داس برای کارت های ایترنت ( شبکه ) موجود در  لپ تاپ ها وجود داره و آیا من میتونم از توابع سوکت در محیط برنامه نویسی C  تحت DOS استفاده کنم یا خیر ؟ 

دنبال چی بگردم؟ آیا درایوری رو میشناسید که  فایل Obj یا Lib در  کنارش  داشته باشه که به پروژه ام اضافه کنم و توابع سوکتی رو ساپورت کنه؟

با تشکر

----------


## pswin.pooya

سلام

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

کلا کارتون بدجوری میلنگه بهتره سوپیچ کنید روی ویندوز و اگر هم امنیت براتون خیلی مهم هست سوئیچ کنید به لینوکس. من مطمئن هستم که لینوکس میتونه تمام نیازهای شما رو بر آورده کنه

----------


## mehrdad254

با تشکر بابت جوابی که دادید .

باید عرض کنم تشخیص و تصمیم گیری در مورد  اینکه به ویندوز سوییچ کنیم بهتر هست یا خیر به عهده من نیست .
به نظر من با توجه به اینکه شبکه از زمان های قدیم مورد استفاده بوده و تاریخ استفاده از شبکه و پروتکل TCP/IP به زمان سیستم عامل داس هم میرسه پیدا کردن درایور کارت شبکه تحت داس نباید مشکل باشه بر خلاف درایور USB تحت داس که به هیچ عنوان پیدا نشد و ما نتونستیم یه مبدل USB به سریال تحت داس بسازیم


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

http://www.georgpotthast.de/sioux/packet.htm
http://www.brutman.com/Dos_Networkin...t_drivers.html

البته نمی دونم packet driver  که تو لینک بالا قرار داره دقیقا چی هستش و چه توابعی رو در اختیار محیط برنامه نویسی C قرار  میده و چه چیزی رو به برنامه باید Add کردش.
اگه کسی بتونه منو راهنمایی کنه ممنون میشم . باتشکر

----------


## pswin.pooya

خب البته اين رو هم من ميدونم. منتها مشكل شما اينه كه از يه ميكروي 32 بيتي دارين و در كنار اون از يه OS شانزده بيتي استفاده مي كنيد. محيط داس داخل ويندوز كه بهش cmd هم ميگن تنها يك شبيه ساز داس هست و نه داس واقعي. داس واقعي حتي با سخت افزارهاي امروزي هم سازگار نيست و به احتمال زياد مواردي مثل هارد ديسك رو نمي تونه شناسايي كنه مگر اينكه امكان ارتباط رو بايوس براش فراهم كنه. در مورد كارت شبكه هم بعيد ميدونم به نتيجه برسيد. اگر مدل چيپست ( نه مدل كارت شبكه و يا اسمش) رو داشته باشيد ميشه كارهايي ديگه هم انجام داد اما باز هم بعيد ميدونم.

----------


## mehrdad254

با تشکر از  پویای عزیز 
می خواستم خواهش کنم اگه امکان داره لینک هایی که من در پست قبلی قرار دادم رو  یه نگاه بندازید و نظر خودتون رو در موردش بهم بگید 
درایورهایی که در ( لینک اول ) قرار دارد چی هستند و چطور میشه ازشون استفاده کرد 

در مورد لینک دوم هم اگه امکان داشته باشه یه توضیحی در مورد packet driver  بدید .
یه پروژه ای هم تعریف شده به اسم*WATTCP  (لینک پایین) * که به نظر مفید میرسه فقط مستنداتش پولی هست ولی خودش رایگانه 
http://www.erickengelke.com/wattcp/

به نظر  شما میشه از این  ها استفاده کرد

----------


## joker

چرا صورت مسئله را پاك نميكني و از مبدلهاي آماده پورتهاي مثلا سريال به شبكه استفاده نميكني؟ ديتا را راحت بفرست روي پورت سريال ، اونطرف خودش ميفرسته روي شبكه ، هرجاي ديگه دنيا هم بودي يك دستگاه ديگه ميزاري و شبكه را تبديل ميكني به سريال و ديتا را ميخوني.
( البته نميدونم ديتاريت اطلاعات رد و بدل شده ات چقدر هست ، اگه بيشتر از حد يك rs232 نيست به نظر من همين كارو بكن ، مطمئن تر و استيبل تر  هست ) قيمتش هم به صرفه هست ، مدلهاي ساده 40-50 تومن براي هر ماژول ( اگه اين روزها گرون نشده باشه !)

پيوست:
به كمك WATTCOM يه زماني ( 15-16 سال پيش ) شركت گالاكتيكام ، روي شبكه هاي BBS پروتكل TCP/IP را تحت داس اجرا كردند و شبكه هاي BBS را آوردن روي وب اينترنت ، به زمان خودش خدائي كردند :)

----------


## pswin.pooya

> مدلهاي ساده 40-50 تومن براي هر ماژول ( اگه اين روزها گرون نشده باشه !)


براي RS232 اگر بخواي از max233 هم استفاده كني بيشتر از 3500 آب نمي خوره با MAX232 كه ميشه با 1000 تومن هم جمعش كرد. چون ايشون از arm استفاده ميكنن به طور 100 درصد حداقل يكي دو تا رابط usart هم داره . منهاي كار مشكل اينجاست كه ارتباط rs232   بيشتر از چند متر جواب نميده (دقيقا يادم نيست ولي فكر كنم يك متر بود).




> می خواستم خواهش کنم اگه امکان داره لینک هایی که من در پست قبلی قرار دادم رو  یه نگاه بندازید و نظر خودتون رو در موردش بهم بگید


همنطور كه گفتم توي اين مورد تجربه اي ندارم و اگر واقعيتش رو بخواييد nتا پرو‍ژه نميه تموم ريخه رو سرم كه اجازه رسيدن به اين شكل كارها رو نميده.

من تنها پيشنهادي كه ميتونم بهتون بكنم اينه كه سوئيچ كنيد به linux كه هم امنه و هم خداي شبكه هست و خيلي راحت مي تونيد توش socket programming بكنيد و با يه مقدار هزينه هم ميتونيد براي خودتون يه توزيع مناسب درست كنيد. البته قضيه توزيع و يا حتي كانفيگ ساده به شدت به پروژه شما و ميزان سرمايه گذاري شما بستگي داره (چون كسايي كه اينكار رو مي كنن معمولا مبلغهاي بالايي رو ميگيرن)

چون شما با arm كار ميكنيد گزينه هاي خيلي زيادي از نظر ارتباطي براتون فراهم هست كه يكي از بهترين و كم دردسرترين اونها usb هست و اگر هم بخوايين با داس كار كنيد بهترين پورتها همون سريال و پورت موازي هستند. 

جيزي كه من فكر مي كنم شما بهش نياز داريد بالا اومدن برنامه بدون هيچ نمايش اعلان و در حداكثر سرعت هست. (يا خلاصه بگم برنامه embedded ميخوايين )‌ اگر بخوايين 16 بيتي كار كنيد كه اينكار فوقالعاده راحت هست و افرادي داخل انجمن هستن كه ميتونن اينكار رو انجام بدن و اگر هم 32 و يا 64 بيتي بخوايين ميتونيد تا آخر تابستون صبر كنيد تا آراكس ريلز شه و يا اينكه يه لينوكس embedded رو بخريد و يا اينكه يه توزيع لينوكس embedded رو بسازيد

----------


## joker

> براي RS232 اگر بخواي از max233 هم استفاده كني بيشتر از 3500 آب نمي خوره  با MAX232 كه ميشه با 1000 تومن هم جمعش كرد. چون ايشون از arm استفاده  ميكنن به طور 100 درصد حداقل يكي دو تا رابط usart هم داره . منهاي كار  مشكل اينجاست كه ارتباط rs232   بيشتر از چند متر جواب نميده (دقيقا يادم  نيست ولي فكر كنم يك متر بود).


اين چيزي كه گفتم اصلا كاري به max232 نداره ، بحث يه چيز ديگه هست ...
نگفتم از RS232 استفاده كنه *فقط* ، گفتم از مبدلهاي RS232 به Ethernet استفاده كنه ، اينطوري محدوديت مكاني و فاصله اي عملا از بين ميره مشكل برنامه نويسي براي شبكه هم عملا كپسوله ميشه و كار برنامه نويسي اين بنده خدا از ديد برنامه نويسي و ارتباطات فقط با پورت سريال بايد سروكله بزنه و نه هيچي ديگه.
( من دارم استفاده ميكنم و تا الانم مشكلي نداشتم ) 
ماژولها تحت نام تجاري Moxa توي بازار هستند.
http://www.moxa.com/product/Serial_Device_Servers.htm

----------


## mehrdad254

با  تشکر از دوستان عزیز که وقت گذاشتن بابت حل مشکل بنده 
باید عرض کنم در این پروژه 2 پورت rs422 ( برای ارتباط با مسافت زیاد )  وجود دارد  که از طریق برد Moxa که بر روی باس PCI کامپیوتر قرار می گیرد فراهم شده .  با توجه به اینکه میخواستیم PC را با لپ تاپ جایگزین کنیم و باس PCI در لپتاپ وجود ندارد، می خواستم از کارت ایترنت لپ تاپ استفاده کنم.
اگر  شما مدل جدید از کارت های موکسا یا تیبو میشناسید که بتوان بر روی لپ تاپ نصب شود مانند pcmcia یا  (بجز pcmcia پورت دیگه ای نمیشناسم)... و حداقل 2 پورت rs422 بدهد ممنون میشم معرفی کنید من خودم تازه به این فکر افتادم  :متفکر:   .
البته نمی دونم این باس ها ایا خودشان درایور تحت داس دارند یا  خیر به هر حال اگه کسی بتونه به این سوال جانبی ما رو هم جواب  بده  یه جورایی گره از کار ما باز کرده.
اما چیزی که  جناب جوکر فرمودند من دنبالش بودم . شرکت tibbo  محصول   DS100B  
را که یک پورت COM  مجازی بر روی شبکه می سازد را تولید کرده که یک شرکت نیز در اصفهان این محصول را وارد کرده است . اما وقتی از تیبو  پرسیدم گفتند  درایور داس ندارد .

آیا محصولات موکسا مانند
http://www.moxa.com/product/NPort_5450.htm 
 دارای درایور داس هستند؟؟؟  اگه باشد که من واقعا ممنون  میشم.

----------


## joker

بازم مسئله را آوردي توي كامپيوتر ، من ميگم كلا بيارش بيرون :)
اگه برنامه نويسيش دست خودته ، روي يك پورت استاندارد معمولي مثل RS232 ديتا را از كامپيوتر بده بيرون ( لب تاپ هاي قديمي يا مدلهاي صنعتي كه اين پورت را سرخودشون دارند استفاده كن )‌، حالا كه اومد بيرون ، ديگه هر بلائي سرش ميتوني بياري بدون نگراني.

من اصلا بهت پيشنهاد نميكنم اين بحث را نيت كني كه تحت داس اجرا كني ، تهيه و اجرا و نصب و خطايابي يك پروتكل شبكه به مراتب زمان بر و هزينه بر تر از اين طرحه ساده هست ، نتيجه كار براي شما مهمه كه ديتا را بتوني بفرستي و بگيري با لب تاپ كه انجام ميشه.

مورد بعدي اينكه پرو‍ژه هايي بوده كه كارفرما اصرارداشته تحت سيستم عامل داس كار كنه !!! ميپرسيدم چرا ميگفتن ويندوز هنگ ميكنه و وووو   با مسئوليت خودم روي ويندوز تحويلشون دادم ، هنوزم داره سيستمه كار ميكنه :) 
درست باهاش كار كني ، يك ويندوز ده سال كاركرد بدونه اشكالش را تضمين ميدم بهت :) اگر هم بخواهي توش خطا به وجود بياري ، مطمئن باش DOS خيلي خيلي حساس تر هست نسبت به  crash كردن...

اگر هم كه نيت كردي لب تاپ بزاري كه ديگه محدود به مدل خاص اون لب تاپت ميشي ( كه احتمالا براي استفاده صنعتي لتتيود فقط ميتوني بزاري ) 

pcmci هم بگردي شايد بتوني پيدا كني ، منتها اينكه توي ايران در دسترس باشه را نميدونم ، ولي اگه باشه روي اينترنت ميتوني آنلاين خريد كني ، احتمالا مشكلي با تحريم و اين چيزها نباشه... ميفرستي دبي از اونجا با باربري برات ميفرستن ( خرجت ميره بالا :) ) 

مثلا اينو ببين :
https://www.videkonline.co.uk/pages/...?sectionID=100

يا
http://www.serial-cards.co.uk/produc...tegoryid=52635

ولي سيستمهايي كه ذاتا اين پورت را روي خودشون دارند بايد باشه ،  لبتاپهاي HP صنعتي اين پورت را بهت ميدن ، بعضي مدلهاي خاص سوني هم هستند كه با خرج كردن حدود 200-300 هزارتومن لب تاپت *فول پورت* ميشه.
اگه اومدي اصفهان بگو تا يك نمونه اش را بهت معرفي كنم ( فقط ببيني چون خودش لازم داره حتما  :بامزه: )

----------


## mehrdad254

> اگه برنامه نويسيش دست خودته ، روي يك پورت استاندارد معمولي مثل RS232 ديتا را از كامپيوتر بده بيرون ( لب تاپ هاي قديمي يا مدلهاي صنعتي كه اين پورت را سرخودشون دارند استفاده كن )‌، حالا كه اومد بيرون ، ديگه هر بلائي سرش ميتوني بياري بدون نگراني.
> من اصلا بهت پيشنهاد نميكنم اين بحث را نيت كني كه تحت داس اجرا كني ، تهيه و اجرا و نصب و خطايابي يك پروتكل شبكه به مراتب زمان بر و هزينه بر تر از اين طرحه ساده هست ، نتيجه كار براي شما مهمه كه ديتا را بتوني بفرستي و بگيري با لب تاپ كه انجام ميشه.


با سلام   خدمت دوست عزیزم باید عرض کنم من این پروژه رو برای یکی از صنایع  دفاعی دارم انجام میدم که سیستمشون به غایت لخت هستش و خیلی حساس  و  5 - 10 ملیون هم زیاد براشون به حساب نمیاد  پس لطفا سعی نکنید مسیر کار را تغییر بدید چون دست من نیست 
البته اکه لپتابی باشه که 2 تا پورت کام داشته باشه شاید بشه کاریش کرد ولی خواهشا منو در مورد استفاده از کارت شبکه راهنمایی کنید  مثل پروژه  WATTCP  
http://www.erickengelke.com/wattcp/

شما منو میترسونی  من برنامه سوکت در  هم سمت سرور و هم سمت کلاینت را دارم  خیلی پیچیده هم نیستش 
فقط موندم چطور درایور نصب کنم و چه لایبرری رو به سی اضافه کنم 
آیا درایور    پکت درایور    همون چیزی هستش  که من لازم دارم ؟؟؟

----------


## pswin.pooya

> من این پروژه رو برای یکی از صنایع  دفاعی دارم انجام میدم


خب فهميدن اين موضوع خيلي راحت بود. من از همون لحظه كه گفتي نمي تونم تصميم بگيرم متوجه قضيه شدم و درك كردم كه داراي براي يه جاي حساس مثل بانك و يا همون دفاعي كار ميكني. جالب اينه شايد 1/10 كسايي كه ميان داخل اين تالار براي اين اهداف ميان. معمولا پروژهها تو اينجور جاها كاملا تعريف شده هست و نميشه اونها رو تغيير داد. از طرف ديگه معمولا از پيشنهادات هم استقبال مي كنن.

همنطور كه درست حدس زده بودم پيشنهادهاي خودم رو به شما دادم كه رعايت اونها ميتونه به پشرفت پروژه كمك بيشتري بكنه. از اونجا كه از داس استفاده مي كنيد پس به صورت يقيين پاي يه برنامه ديگه در ميون نيستش كه بخوايين از اون استفاده كنيد و تعداد IO شما هم احتمالا به همون شبكه و ماكزيمم حالت به ماوس و كي بورد نياز داريد. همه اين موارد رو ميشه به سادگي به صورت embedded برطرفشون كرد. شما به توجه به مدل كارت شبكه اي كه دارين ميتونيد از مستندات زير براي پياده سازي اون كمك بگيريد:
http://wiki.osdev.org/Category:Network_devices

البته سورس سيستم عاملهاي زيادي رو هم مثل PrettyOS ميتونيد گير بيارين كه پياده سازي عملي دارن. 

متاسفانه در مورد داس نمي تونم كمكتون بكنم و از اونجا كه تعداد برنامه نويسهاي داس هم به شدت كم شده بعيد ميدونم به نتيجه مطلوب برسيد.

----------


## mehrdad254

> از اونجا كه از داس استفاده مي كنيد پس به صورت يقيين پاي يه برنامه ديگه در ميون نيستش كه بخوايين از اون استفاده كنيد و تعداد IO شما هم احتمالا به همون شبكه و ماكزيمم حالت به ماوس و كي بورد نياز داريد. همه اين موارد رو ميشه به سادگي به صورت embedded برطرفشون كرد. 
> البته سورس سيستم عاملهاي زيادي رو هم مثل PrettyOS ميتونيد گير بيارين كه پياده سازي عملي دارن.


ما یه PC داریم  که یه RS422  ازش میره به تجهیز اصلی  و  یه RS422   میره به یه باکس که اون باکس از طریق کلی کابل با تجهیز ما ارتباط داره و در نزدیکی تجهیزمون هستش.
حالا من می خوام در کنار لپتاب یه مبدل قرار بدم که با برنامه روی PC از طریق  پورت شبکه ارتباط برقرار کنه و 2 تا RS422  که کفتم رو  ایجاد کنه 
حالا اگه شما میگی  PC رو هم بیام تو دل همون مبدل قرار بدم خب فکر خیلی خوبیه و من هم اتفاقا تراشه ARM رو برا همین انتخاب کردم که بشه سیستم عامل روش پورت کرد ولی اینو گذاشتم تو برنامه آینده   چون نمیدونم چطور میتونم مونیتور یا LCD رو باهاش درایو کنم .

----------


## pswin.pooya

> حالا اگه شما میگی  PC رو هم بیام تو دل همون مبدل قرار بدم خب فکر خیلی  خوبیه و من هم اتفاقا تراشه ARM رو برا همین انتخاب کردم که بشه سیستم عامل  روش پورت کرد ولی اینو گذاشتم تو برنامه آینده   چون نمیدونم چطور میتونم  مونیتور یا LCD رو باهاش درایو کنم .


از اونجا كه مطمئن هستم از يه پردازنده standalone استفاده نمي كني و 100 درصد از ميكروي arm استفاده ميكني به نظرم ايده بدي باشه كه يه سيستم نظامي رو باهاش كنترل كني چون تجربه نشون داده كه ميكروكنترلرها قابل اطمينان نيستند.

من ميگم از همون PC استفاده كن. فقط بجاي اينكه از سيستم عامل داس استفاده كني خودت دستبكار شو يه برنامه embedded بنويس كه كارهات رو راه بندازه. براي 16 بيتي اينكار زمان زيادي رو نميگيره چون ميتوني از وقفه هاي بايوس استفاده كني اما قضيه 32 و 64 بيتي فرق ميكنه و بايد همه چي رو خودت بنويسي از درايور كي بورد گرفته تا  LCD فقط چون احتمالا يه محيط ريل تايم نرم لازم داري بهتر اينكار رو بصورت 32 و يا 64 بيتي انجام بدي چون كنترل تمام قطعات رو خودت انجام ميدي و ميتوني از PIT براي ساخت تايمر ريلتايمت استفاده كني.




> چون نمیدونم چطور میتونم مونیتور یا LCD رو باهاش درایو کنم .


اگر منظورت LCD معمولي (مونيتور) هست كه خود منم دنبالش هستم.اما اگر منظورت LCDهاي كوچيك مثل همون LCD معروف N96 هست كه به راحتي ميتوني برنامه هاشون رو از روي اينترنت پيدا كني خود من اينكار رو كردم و يه LCD ساده رو با ARM راه انداختم. كار خاصي نداره. 

من احساس ميكنم بيشتر از هرچيزي نياز به يه برنامه embedded داري. بهتره وقتي سراغ OS بري كه به مولتي تسكينگ و تردها نياز پيدا كني. ضمننا براي  OS هم حداقل نياز به 64 مگ رم داري (براي يه لينوكس واقعي و ساده) كه همين باعث ميشه مجبور شي يه بورد چند لايه بسازي كه خودش حوصله ميخواد. 

لگر بخواي از لپتاپ استفاده كني 100 درصد به بورد مبدل نياز داري حداقل سوئيچ كن روي پورتي كه برنامه نويسي اون از همه موارد راحتر باشه.

----------

