کامپایل کرنل لینوکس

کامپایل کرنل لینوکس
برای ساخت کرنل نیاز به یک سیستم عامل لینوکس روی کامپیوتر داریم و همه مراحل روی کامپیوتر انجام میشه و نیازی به برد نداریم. با این حال می تونیم با خود برد  به ساخت کرنل بپردازیم ولی بخاطر کند بودن روی PC انجام می دهیم و در اصطلاح Cross Compile می کنیم.
برای ساخت کرنل احتیاج به دانلود حدود 500 تا 600 مگابایت داریم که نیاز به سرعت بالا اینترنت دارد.
ابتدا نیاز به چندتا نرم افزار داریم، اونها را دانلود می کنیم.

apt-get update
apt-get install build-essential fakeroot kernel-package u-boot-tools zlib1g-dev libncurses5-dev autoconf automake make libtool xutils-dev libdrm-dev git libusb-1.0-0-dev uboot-mkimage pkg-config

حالا باید cross compile را تنظیم کنیم.
خوب اول سه خط زیر را به آخر فایل etc/apt/sources.list اضافه کنید

deb http://www.emdebian.org/debian/ unstable main
deb http://www.emdebian.org/debian/ wheezy main
deb http://www.emdebian.org/debian/ sid main

حالا دستورات زیر را انجام می دهیم.

apt-get install emdebian-archive-keyring
apt-get update
apt-get install gcc-4.6-arm-linux-gnueabihf
cd /usr/bin 
for i in arm-linux-gnueabi*-4.6 ; do ln -s $i ${i%%-4.6} ; done

خوب اگر با اخطار روبرو شدید بجای 4.6 4.5 یا 4.7 را امتحان کنید. (من قبلا انجام داده بودم الان حضور ذهن ندارم)
خوب حالا باید سورس کرنل لینوکس را دانلود کنیم. این روش خیلی طولانیه و حدود 500 مگابایت دانلود میشه . فقط اگر وسط دانلود اینترنت قطع بشه باید از اول انجام بدید.

mkdir /home/cubie
cd /home/cubie 
git clone https://github.com/linux-sunxi/linux-sunxi linux-sunxi

روش دیگر دانلود سورس از لینک زیر است.
https://github.com/linux-sunxi/linux-sunxi/archive/sunxi-3.0.zip
گزینه zip را دانلود کنید و در فولدر /home/cubie آن را اکسترکت کنید.
خب حالا دستورات زیر را اجرا می کنیم.
برای برد های با چیپ Allwinner در اصطلاح اسم sunxi برای کرنل لینوکس انتخاب شده و دو نسخه آن در حال توسعه است. یکی ورژن 3.0 و بعدی ورژن 3.4. نسخه 3.0 پایدار تره، بخاطر همین ما اون را انتخاب می کنیم.

cd linux-sunxi
git checkout sunxi-3.0

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

make ARCH=arm sun4i_defconfig

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

nano .config

با تنظیم فایل کانفیگ می تونیم ماژول ها و درایورهای لازمون را فعال یا غیر فعال کنیم.

#CONFIG_IPV6=y

برای مثال با گذاشتن # در اول خط مربوط به تنظیمات IPV6 را غیرفعال می کنم.
برای ذخیره هم اول Ctrl+x بعد y و بعد اینتر را می زنم
می تونیم با دستور زیر بوسیله منو تنظیمات را انجام بدیم.

make ARCH=arm 
menuconfig

برای مثال برای فعال کردن درایور مروبط به دوربین OV7670 مراحل زیر را انجام دهید. در حالت پیشفرض درایور این سنسور با کرنل لود نمیشه و اصطلاحا بصورت Module هست. می خواهیم اون را بصورت کرنل درایو در بیاریم.

Device Driver -> Multimedia Support -> CSI driver config 4 sun4i

بعد ov7670 را از حالت M به * تبدیل می کنیم. (با زدن کلید Space)

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

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 uImage

فایل uImage از فولدر زیر داخل uSD کپی می کنیم و برد را روشن می کنیم.
برای اطمینان فایل uImage قبلی را کپی یا rename کنید

arch/arm/boot/
Bookmark the پیوند یکتا.

6 Responses to کامپایل کرنل لینوکس

  1. عیسی نعمتی میگوید :

    سلام
    آیا سورس اندورید ۴ هم قابل دسترس هست تا بشه اون رو هم تغییر داد و بعد برای این برد کامپایل کرد؟

  2. tabrizfaculty میگوید :

    با سلام آقای mahdichi برای تغییر منو های لینوکس یا آندروید چطوری میشه برنامه نویسی کرد؟
    منظورم اینه که وقتی برد رو روشن میکنیم می خواهیم که تحت منو و بر اساس برنامه و عملکردی که خودمان نوشته ایم اجرا شود و در ضاهر برای کاربر در حالت عادی تحت لینوکس بودن دستکاه قابل تشخیص نباشد. آیا باید هسته لینوکس کامپایل شود؟ یا… کار خیلی سختی است یا .. لطفا راهنمایی کنید. باتشکر

    • mahdichi میگوید :

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

  3. بهروز میگوید :

    سلام

    آیا شماتیکی از اینکه چطور این دوربین رو باید به برد وصل کنیم دارین؟

  4. behrouz3884 میگوید :

    سلام خسته نباشید. چجوری میتونیم لوگوی بوت رو عوض کنیم و نوشته های ابتدایی رو نذاریم نشون داده بشه؟

پاسخ دهید