热度 13
2013-6-6 11:27
3465 次阅读|
0 个评论
atmel官方网站www.at91.com中对基于DTB的linux内核编译流程如下: 本文档为本人在ubuntu 10.04下实验流程,红色文字为本人添加的记录; by Jevon Apr.2013 Get sources To get the source code, you have to clone the repository: 注意:如有提示“程序“git”尚未安装。 您可以使用以下命令安装: sudo apt-get install git-core 用以下命令来在本地上克隆github上的内核源码仓库,该过程很长,取决于网速,慢慢等待: $ git clone git://github.com/linux4sam/linux-at91.git Cloning into 'linux-at91'... remote: Counting objects: 5239592, done. remote: Compressing objects: 100% (764014/764014), done. Receiving objects: 100% (5239592/5239592), 1018.56 MiB | 11.18 MiB/s, done. remote: Total 5239592 (delta 4448248), reused 5218219 (delta 4427054) Resolving deltas: 100% (4448248/4448248), done. Checking out files: 100% (38567/38567), done. 打开下载到的linux-at91源码仓库,浏览一下: $ cd linux-at91 $ ls arch CREDITS drivers include Kbuild lib mm REPORTING-BUGS security usr block crypto firmware init Kconfig MAINTAINERS net samples sound virt COPYING Documentation fs ipc kernel Makefile README scripts tools 在以后使用中,可以用下面命令来实现源码的更新: The source code has been taken from the master branch which is pointing on the latest branch we use. hand Note that you can also add this Linux4SAM repository as a remote GIT repository to your usual Linux git tree. It will save you a lot of bandwidth and download time: $ git remote add linux4sam git://github.com/linux4sam/linux-at91.git $ git remote update linux4sam Fetching linux4sam From git://github.com/linux4sam/linux-at91 * at91-3.4-trunk_merge - linux4sam/at91-3.4-trunk_merge * linus2639_5series_1.x - linux4sam/linus2639_5series_1.x * linux-3.4.9-at91 - linux4sam/linux-3.4.9-at91 * linux-3.6.9-at91 - linux4sam/linux-3.6.9-at91 * master - linux4sam/master If you want to use an other branch, you can list them and use one of them by doing this: $ git branch -r origin/HEAD - origin/master origin/at91-3.4-trunk_merge origin/linus2639_5series_1.x origin/linux-3.4.9-at91 origin/linux-3.6.9-at91 origin/master $ git checkout origin/linux-3.6.9-at91 -b linux-3.6.9-at91 Branch linux-3.6.9-at91 set up to track remote branch linux-3.6.9-at91 from origin. Switched to a new branch 'linux-3.6.9-at91' Configure and Build the Linux kernel Now you have to configure the Linux kernel according to your hardware. The default configuration for a particular SoC is a good starting point that you will be able to adapt to your needs afterwards. $ cd linux-at91 $ ls arch/arm/configs/+(at91|sam)* arch/arm/configs/at91_dt_defconfig arch/arm/configs/at91sam9g45_defconfig arch/arm/configs/at91rm9200_defconfig arch/arm/configs/at91sam9rl_defconfig arch/arm/configs/at91sam9260_defconfig arch/arm/configs/at91x40_defconfig arch/arm/configs/at91sam9261_defconfig arch/arm/configs/sam9_l9260_defconfig arch/arm/configs/at91sam9263_defconfig arch/arm/configs/sama5d3_defconfig arch/arm/configs/at91sam9g20_defconfig $ $ make ARCH=arm name of your SoC_defconfig # sama5d3_defconfig for instance HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf # # configuration written to .config # At this step, you can modify default configuration using the menuconfig $ make ARCH=arm menuconfig 如果在执行make ARCH=arm menuconfig 后出现错误; 解决办法如下: sudo apt-get insatll ncurses-dev 完成后ok! 接下来是编译内核,编译内核所需交叉编译器: 本人在ubuntu上面有一下两个交叉编译器: 1.arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 该版本比较适合用于编译内核的场合,经过测试该版本编译at91bootsap时出现问题; 2.arm-2009q1-161-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 该版本比较适合用于编译没有内核的场合,如at91bootstrap,uboot; (以前用的VMWARE6.5+FC12安装好VM TOOL后就可以在/mnt/hgfs 访问window中的共享文件夹了;如今把FC12抛弃了,改装了ubuntu10.04但发现hgfs目录下是空的; 安照以下步骤解决该问题: sudo apt-get install open-vm-dkms 安装过程均按照默认设置; sudo mount -t vmhgfs .host:/ /mnt/hgfs ) 这里本人用arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2来编译内核; 建立交叉编译环境: 在arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2同级目录下: sudo tar xvjf arm-2007q1-10-arm-none-linux-gnueabi.tar.bz2 -C /usr/local 完成后交叉编译器就已经建立好了,其路径如下: /usr/local/arm-2007q1/bin/arm-none-linux-guneabi- And build the Linux kernel image $ make ARCH=arm CROSS_COMPILE=path_to_cross-compiler/cross-compiler-prefix- zImage Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready make ARCH=arm CROSS_COMPILE=path_to_cross-compiler/cross-compiler-prefix- uImage 本人实际命令如下: make ARCH=arm CROSS_COMPILE=/usr/local/arm-2007q1/bin/arm-none-linux-guneabi- uImage 注:make uImage 这个命令要求您的 Ubuntu 系统里面已经安装 uImage 工具,否则请使用一下命令安装该工具 sudo apt-get install uboot-mkimage 内核编译结束,arch/arm/boot/目录下的 uImage 就是我们需要的结果。 Kernel: arch/arm/boot/Image is ready Kernel: arch/arm/boot/zImage is ready UIMAGE arch/arm/boot/uImage Image Name: Linux-3.6.9+ Created: Mon Feb 4 12:26:46 2013 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2837352 Bytes = 2770.85 kB = 2.71 MB Load Address: 20008000 Entry Point: 20008000 Image arch/arm/boot/uImage is ready 接下来编译DTBS: make ARCH=arm CROSS_COMPILE=path_to_cross-compiler/cross-compiler-prefix- dtbs DTC arch/arm/boot/at91sam9g20ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9g20ek.dts" DTC arch/arm/boot/at91sam9g20ek_2mmc.dtb DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9g20ek_2mmc.dts" DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9m10g45ek.dts" DTC arch/arm/boot/at91sam9n12ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9n12ek.dts" DTC arch/arm/boot/at91sam9g15ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9g15ek.dts" DTC arch/arm/boot/at91sam9g25ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9g25ek.dts" DTC arch/arm/boot/at91sam9g35ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9g35ek.dts" DTC arch/arm/boot/at91sam9x25ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9x25ek.dts" DTC arch/arm/boot/at91sam9x35ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/at91sam9x35ek.dts" DTC arch/arm/boot/sama5d31ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/sama5d31ek.dts" DTC arch/arm/boot/sama5d31ek_pda.dtb DTC: dts-dtb on file "arch/arm/boot/dts/sama5d31ek_pda.dts" DTC arch/arm/boot/sama5d33ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/sama5d33ek.dts" DTC arch/arm/boot/sama5d33ek_pda.dtb DTC: dts-dtb on file "arch/arm/boot/dts/sama5d33ek_pda.dts" DTC arch/arm/boot/sama5d34ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/sama5d34ek.dts" DTC arch/arm/boot/sama5d34ek_pda.dtb DTC: dts-dtb on file "arch/arm/boot/dts/sama5d34ek_pda.dts" DTC arch/arm/boot/sama5d35ek.dtb DTC: dts-dtb on file "arch/arm/boot/dts/sama5d35ek.dts" path_to_cross-compiler is only needed if it is not in your PATH. Usually cross-compiler-prefix- looks like arm-none-linux-gnueabi- or arm-linux-gnueabi- If the building process is successful, the final images can be found under arch/arm/boot/ directory. $ ls arch/arm/boot/ aks-cdu.dtb at91sam9m10g45ek.dtb ethernut5.dtb sama5d33ek.dtb tny_a9g20.dtb at91sam9263ek.dtb at91sam9n12ek.dtb evk-pro3.dtb sama5d33ek_pda.dtb usb_a9260.dtb at91sam9g15ek.dtb at91sam9x25ek.dtb install.sh sama5d34ek.dtb usb_a9263.dtb at91sam9g20ek_2mmc.dtb at91sam9x35ek.dtb kizbox.dtb sama5d34ek_pda.dtb usb_a9g20.dtb at91sam9g20ek.dtb bootp Makefile sama5d35ek.dtb at91sam9g25ek.dtb compressed sama5d31ek.dtb tny_a9260.dtb at91sam9g35ek.dtb dts sama5d31ek_pda.dtb tny_a9263.dtb