记录:编译ARM_E9的过程
第一步:肯定是拷贝对于的资源包呀,命令 cp
xiao-ma@ubuntu:~/Embed_arm/kernal$ ls
linux_E9_V2_3.0.35_for_linux_v1.1.tar.bz2
第二步:有了资源包,肯定需要解压出来呀,命令tar -xvf linux_E9_V2_3.0.35_for_linux_v1.1.tar.bz2
如果要解压到你想指定的文件夹,那就在该命令的后面继续加上-C /你指定的路径吧,下面是你解压出来的:
xiao-ma@ubuntu:~/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux$ ls
arch config_e9_linux crypto firmware init Kconfig MAINTAINERS modules.order samples sound virt
block COPYING Documentation fs ipc kernel Makefile net scripts tools
build.sh CREDITS drivers include Kbuild lib mm README security usr
第三步:编译环境的安装:(必不可少)
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install zlibc minizip
sudo apt-get install libidn11-dev libidn11
这个是安装32位环境库的命令sudo apt-get install lib32ncurses5 lib32z1
解释:
build-essential (基本的编程库(gcc, make等)
libncurses5-dev (meke menuconfig要调用的)
要是还会有问题出现,就百度一下吧,不同的系统,也是大同小异
第四步:在该目录下使用 make menuconfig 这个命令就是让你进入一个选择题状态(手动狗头)
这里的注意事项就是:如果你的一些环境没有配置好的话,是进不去的,使用,一定要配置好相应的环境
一般有如下:
第五步:这个目录下,有个build.sh 是个自动编译的脚本,使用sudo ./build.sh运行它,就可以编译了,
xiao-ma@ubuntu:~/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux$ ls
arch config_e9_linux crypto firmware init Kconfig MAINTAINERS modules.order samples sound virt
block COPYING Documentation fs ipc kernel Makefile net scripts tools
build.sh CREDITS drivers include Kbuild lib mm README security usr
第六步:编译完成后的状态,你会发现多了些东西
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
KSYM .tmp_kallsyms1.S
AS .tmp_kallsyms1.o
LD .tmp_vmlinux2
KSYM .tmp_kallsyms2.S
AS .tmp_kallsyms2.o
^[ LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
GZIP arch/arm/boot/compressed/piggy.gzip
AS arch/arm/boot/compressed/head.o
CC arch/arm/boot/compressed/misc.o
CC arch/arm/boot/compressed/decompress.o
SHIPPED arch/arm/boot/compressed/lib1funcs.S
AS arch/arm/boot/compressed/lib1funcs.o
AS arch/arm/boot/compressed/piggy.gzip.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage
Image Name: Linux-3.0.8
Created: Mon Sep 29 01:48:07 2020
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 5549776 Bytes = 5419.70 kB = 5.29 MB
Load Address: 10008000
Entry Point: 10008000
Image arch/arm/boot/uImage is ready
xiao-ma@ubuntu:~/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux$ ls
arch config_e9_linux crypto firmware init Kconfig MAINTAINERS modules.order README security tools vmlinux
block COPYING Documentation fs ipc kernel Makefile Module.symvers samples sound usr vmlinux.o
build.sh CREDITS drivers include Kbuild lib mm net scripts System.map virt
//再切换到该目录下的arch/arm/boot下:
xiao-ma@ubuntu:~/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux$ cd arch/arm/boot/
xiao-ma@ubuntu:~/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/arch/arm/boot$ ls
bootp compressed Image install.sh Makefile uImage zImage
多出来的uImage 就是一个镜像,在烧到arm板子上面就可以了;
至此,编译的工作就结束了,
记录:编译ARM_E9内核遇到的错误
①:使用build.sh进行编译,发现编译所使用的编译器没有找到,vi build.sh更改为正确的编译器路径即可
xiao-ma@ubuntu:~/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux$ l //解压我们所要编译的内核后,进入到该目录下,ls如下:
arch/ config_e9_linux crypto/ firmware/ init/ Kconfig* MAINTAINERS* modules.order samples/ sound/ virt/
block/ COPYING* Documentation/ fs/ ipc/ kernel/ Makefile* net/ scripts/ tools/
build.sh* CREDITS* drivers/ include/ Kbuild* lib/ mm/ README* security/ usr/
xiao-ma@ubuntu:~/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux$ sudo ./build.sh //本来可以直接运行buile.sh就可以直接编译了,结果出现了错误
[sudo] password for xiao-ma:
CPU number is 3
make: /home/xiao-ma/Embed_arm/Envirnment/opt/EmbedSky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc: Command not found //意思就是我所使用的编译器没有找到,所要根本不能进行编译,不过也很奇怪,我查看了下,按照这个路径去寻找他所指定的编译器,是存在的,后面我直接更改了这里的编译器,换成了另外一个编译器的路径就可以编译了
scripts/kconfig/conf --silentoldconfig Kconfig
make: /home/xiao-ma/Embed_arm/Envirnment/opt/EmbedSky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc: Command not found
CHK include/linux/version.h
CHK include/generated/utsrelease.h
HOSTCC scripts/bin2c
CC scripts/mod/empty.o
/bin/sh: 1: /home/xiao-ma/Embed_arm/Envirnment/opt/EmbedSky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc: not found
scripts/Makefile.build:305: recipe for target 'scripts/mod/empty.o' failed //这里的错误一个是前面的编译器引起的,前面的错误解决后,这个问题在后面就没有了,
make[2]: *** [scripts/mod/empty.o] Error 127
scripts/Makefile.build:441: recipe for target 'scripts/mod' failed
make[1]: *** [scripts/mod] Error 2
make[1]: *** Waiting for unfinished jobs....
make[1]: 'include/generated/mach-types.h' is up to date.
CC kernel/bounds.s
/bin/sh: 1: /home/xiao-ma/Embed_arm/Envirnment/opt/EmbedSky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-none-linux-gnueabi-gcc: not found
/home/xiao-ma/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/./Kbuild:35: recipe for target 'kernel/bounds.s' failed
make[1]: *** [kernel/bounds.s] Error 127
Makefile:985: recipe for target 'prepare0' failed
make: *** [prepare0] Error 2
make: *** Waiting for unfinished jobs....
Makefile:506: recipe for target 'scripts' failed
make: *** [scripts] Error 2
②:编译一会儿了,出现错误:
CC kernel/itimer.o
CC arch/arm/plat-mxc/devices/platform-fsl-usb2-wakeup.o
CC mm/truncate.o
TIMEC kernel/timeconst.h
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
/home/xiao-ma/Embed_arm/kernal/opt/EmbedSky/TQIMX6/E9/Linux/linux_E9_3.0.35_for_Linux/kernel/Makefile:140: recipe for target 'kernel/timeconst.h' failed
make[1]: *** [kernel/timeconst.h] Error 255
Makefile:945: recipe for target 'kernel' failed
make: *** [kernel] Error 2
make: *** Waiting for unfinished jobs....
CC mm/vmscan.o
CC arch/arm/plat-mxc/devices/platform-imx-pm.o
CC arch/arm/plat-mxc/devices/platform-mxc_hdmi.o
CC mm/shmem.o
CC arch/arm/plat-mxc/devices/platform-mxc-hdmi-core.o
CC arch/arm/plat-mxc/devices/platform-imx-hdmi-soc.o
//百度了一下,还好,找到了答案,这里,我们打开 kernel/timeconst.pl
@val = @{$canned_values{$hz}};
if (!defined(@val)) {
@val = compute_values($hz);
}
output($hz, @val);
将if (!defined(@val)) 改为if (!(@val)),再次编译就可以通过了。