配置交叉编译器:
解包gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2
解包后,得到的目录名比较长,改下目录名为“arm-gcc"
vim /etc/bashrc 增加语句
export PATH=/disk3/myown/arm-gcc/bin:$PATH
保存退出后, 注消系统后环境变量生效
重登系统后,在终端输入arm按两下tab键:
会出现好多个: arm-linux-gnueabihf-*
内核编译:
在orangepi_sdk目录下:
进入source/linux-3.4.112内核源码目录.
注意: uboot, linux内核都是可以支持多种CPU架构, 一个CPU架构下又有多种SOC, 一个SOC又可以做成多种方案.所以我们编译前都需要指定编译哪种架构,哪种SOC, 哪种方案
linux内核里的配置项非常多,厂家一般都会提供一些默认的配置。配置文件在CPU架构目录下的configs目录.
我们可用的配置在arm/configs:
sun8iw7p1smp_android_defconfig sun8iw7p1smp_linux_defconfig
sun8iw7p1smp_android_karaok_defconfig sun8iw7p1smp_min_defconfig
sun8iw7p1smp_android_secure_defconfig sun8iw7p1smp_secure_defconfig
sun8iw7p1smp_defconfig
1). 使用厂商提供的默认配置:
可以把xxx_defconfig 复制成源码根目录下的.config
也可以: make xxx_defconfig
make sun8iw7p1smp_android_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
//注意,以后只要在linux里打"make"都需指定ARCH, CROSS_COMPILE
2). 配置内核:
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
3). 编译内核
make -j4 uImage ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
编译时出现错误:
drivers/base/firmware_class.c: In function ‘firmware_data_read’:
drivers/base/firmware_class.c:631:9: error: implicit declaration of function ‘kobj_to_dev’ [-Werror=implicit-function-declaration]
原因是那源文件里没有包含 "kobj_to_dev"的头文件.
在drivers/base/firmware_class.c里写上包含头文件<linux/genhd.h>
修改好后,接着编译即可.
编译完成后, 在arch/arm/boot/uImage就是编译出来的内核镜像
4). 把板上SD卡接上pc, 把编译出来的内核镜像放到卡的第一个分区(即fat分区),也可以放到第二个分区(需注意命令)
5). 把SD卡重放到板上后,即可读出来到内存来启动
fatload mmc 0:1 0x43000000 /script.bin //内核用的配置文件
fatload mmc 0:1 0x42000000 /uimage //内核镜像
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"保存再重新启动内核即可
//启动后,只要有一堆的东西输出即是正常的了
6). 如果想要开发板开机后自动引导内核, 可以修改bootcmd环境变量来完成
setenv bootcmd "fatload mmc 0:1 0x43000000 /script.bin; fatload mmc 0:1 0x42000000 /uimage; bootm 0x42000000"
saveenv //保存环境变量
03 OrangePi 内核编译
最新推荐文章于 2025-03-27 00:20:31 发布