04 内核编译

Orange Pi内核编译


1.配置交叉编译器:
	(1)解包gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2
			tar -jxvf gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2

	(2)将解压后的目录名改名为arm-gcc	//为了容易记,容易写(也可以不改,但如果不改,下面配置环境变量时记得要写正确路径)

	(3)配置(增加)环境变量:
			sudo vim /etc/bash.bashrc
			增加语句:
				export  PATH=/arm-gcc所在目录/arm-gcc/bin:$PATH
			(保存退出后,注消系统后环境变量生效)
			(重登系统后,在终端就可以直接使用arm-linux-gnueabihf-*来编译)

2.内核编译:
	(1)进入orangepi_sdk/source/linux-3.4.112内核源码目录

			注意:
				uboot,linux内核都是可以支持多种CPU架构,一个CPU架构下又有多种SOC,一个SOC又可以做成多种方案;所以我们编译前都需要指定编译哪种架构,哪种SOC,哪种方案。
    			linux内核里的配置项非常多,厂家一般都会提供一些默认的配置。配置文件在CPU架构目录下的configs目录。
    			我们可用的配置在arch/arm/configs:
      				sun8iw7p1smp_android_defconfig         	sun8iw7p1smp_linux_defconfig
      				sun8iw7p1smp_android_karaok_defconfig  	sun8iw7p1smp_min_defconfig
      				sun8iw7p1smp_android_secure_defconfig  	sun8iw7p1smp_secure_defconfig
          			sun8iw7p1smp_defconfig
          		使用厂商提供的默认配置:
        			可以把xxx_defconfig直接复制成源码根目录下的.config
        			也可以:make xxx_defconfig来生成.config文件

    (2)编译生成.config文件:
    		make sun8iw7p1smp_android_defconfig  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
    		(注意:以后只要在linux里打"make"都需指定ARCH和CROSS_COMPILE)

    (3)配置内核:
    		make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

    		出现界面后(按空格键选上或取消选中项):
         		[*] Enable loadable module support  --->
            		[*]     Forced module unloading
            		[ ]   Module versioning support
            		[ ]   Source checksum for all modules

         		Device Drivers  --->   
            		<*> Multimedia support  --->
                		[*]   Video capture adapters  --->
                    			[*]   V4L USB devices  --->
                         			<*>   USB Video Class (UVC)     
         		General setup  --->
            		[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

         		CPU Power Management  --->
            		CPU Frequency scaling  --->
                		[ ] CPU Frequency scaling 

    (4)在drivers/base/firmware_class.c里写上包含头文件<linux/genhd.h>		//不然会出错(原因是那源文件里没有包含"kobj_to_dev"的头文件)

    (5)编译内核(编译完成后,在arch/arm/boot/uImage会生成编译出来的内核镜像):
    		make -j4 uImage  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 	//-j4为使用4线程进行编译

    (6)把板上sd卡接上pc,把编译出来的内核镜像放到卡的第一个分区(即fat分区),也可以放到第二个分区(需注意命令)

    (7)把sd卡重放到板上后,即可读出来到内存来启动

    (8)读取分区内容:
    		fatload mmc 0:1 0x43000000 /script.bin   //内核用的配置文件(如果sd卡为ext4格式,则用ext4load)
    		fatload mmc 0:1 0x42000000 /uImage 	//内核镜像(如果sd卡为ext4格式,则用ext4load)

    (9)启动内核:
    		bootm 0x42000000

    		如果出现以下错误:
        		Error: unrecognized/unsupported machine ID (r1 = 0x00000000).
       			Available machine support:
        		ID (hex)        NAME
        		00001029        sun8i
        		Please check your kernel config and/or bootloader.
            修正方法:设置uboot的环境变量"setenv machid 0x1029",保存再重新启动内核即可
        	(启动后,只要有一堆的东西输出即是正常的了)

    (10)如果想要开发板开机后自动引导内核,可以修改bootcmd环境变量来完成:
        	setenv bootcmd "fatload mmc 0:1 0x43000000 /script.bin; fatload mmc 0:1 0x42000000 /uImage; bootm 0x42000000"
        	saveenv		//保存环境变量

注意:
因为还没有文件系统,所以在启动后,当启动到内核时会卡死,不过等写入文件系统后就没问题了(文件系统的制作在下一章)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值