Z-turn Lite Linux 开发环境搭建
安装工具链
解压工具链
|
|
把工具链所在的bin 文件夹的路径加入到PATH
在~/.zshrc 的末尾加入下面两句
|
|
source ~/.zshrc
之后使用下面命令验证是否生效
|
|
编译U-Boot
|
|
make distclean 清除多余的目标
make zynq_zturn_config 会根据 boards.cfg 文件中的对应板子的描述来配置U-Boot
|
|
编译过程中可能会出现的错误
以下错误都是因为我的Linux 版本太新导致的, 用官方推荐的老版本Ubuntu 应该是不会有问题的
-
sha1.c:64:19: error: unknown type name ‘sha1_context'
这只是其中一个错误, 类似的错误还有很多, 根本原因是编译过程中使用了系统的头文件(如: /usr/include/sha1.h )而没有用U-Boot 自带的头文件
-
解决办法: 在编译的时候使用 -isystem 参数指定某个路径为系统路径, 这样这个路径的优先级就会高于 /usr/include
如此这般在编译 tools 目录的时候就可以优先使用U-Boot 的include 目录下的头文件
-
-
usr/bin/ld: errno: TLS definition in /usr/lib/libc.so.6 section .tbss mismatches non-TLS reference in img2srec.o
出现这个错误的原因是, 在编译时使用了与系统 glibc 版本差异较大的 errno.h 头文件
这个头文件在 U-Boot/include 目录下, 要解决这个问题, 就必须使用系统的errno.h 头文件来编译
临时的解决办法是把 U-Boot/include/errno.h 改个名, 但是这样的话后面交叉编译的时候又会找不到这个头文件
参考下面的解决办法
Z-turn Lite修改U-boot tools/Makefile 一劳永逸解决问题
只需要把 HOSTCPPFLAGS 改成如下样子, 增加前面两个配置即可
|
|
其中 -include /usr/include/errno.h 告诉 gcc 优先使用 /usr/include/errno.h 头文件
-isystem $(SRCTREE)/include 告诉gcc 优先使用 $(SRCTREE)/include 的头文件
编译Kernel
|
|
可能碰到的错误
-
/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
原因是gcc 版本太新了, 有两种办法
-
修改源码
Kernel/linux-xlnx/scripts/dtc/dtc-lexer.lex.c
找到YYLTYPE yylloc;
这一行, 在前面加上 extern1
extern YYLTYPE yylloc;
- 降低gcc 版本 ( 不推荐 )
-
-
arch linux /bin/sh: line 1: bc: command not found
原因是系统没有装bc
解决办法:1
sudo pacman -S bc
-
arch linux “mkimage” command not found - U-Boot images will not be built
1 2
sudo pacman -Sy sudo pacman -S uboot-tools
制作文件系统
制作 ramdisk
直接用MYIR 提供的 ramdisk 来改就可以了, 懒得自己再去做根文件系统了
新建一个tmp 文件夹, 所有操作在里面做
|
|
-
解压ramdisk
由于 uramdisk.image.gz 是由 mkimage 生成的, 带有64 字节的文件头, 所以要先去掉64 个字节的文件头才可以解压
1 2
dd if=uramdisk.image.gz of=ramdisk.image.gz bs=64 skip=1 gunzip ramdisk.image.gz
-
新建一个 rootfs 文件夹, 把 ramdisk.image 挂载到 rootfs
1 2 3
mkdir rootfs sudo mount -o loop,rw ramdisk.image rootfs ls rootfs
-
进入rootfs 根据需要修改文件系统
1
cd rootfs
-
在使用 sync 把修改同步到 ramdisk.image 后结束挂载
1 2
sync sudo umount rootfs
-
重新生成 uramdisk.image.gz
1 2
gzip -9 ramdisk.image sudo mkimage -A arm -T ramdisk -C gzip -n Ramdisk -d ramdisk.image.gz uramdisk.image.gz
-
删除临时文件
1 2
rm ramdisk.image.gz rm -rf rootfs
修改根文件系统
解压根文件系统
|
|
修改好后重新打包
|
|