为JZ2440准备具有设备树的内核#
1.获取所需的文件#
在编译u-boot和kernel时, 我们可以使用新的工具链, 只要这个工具链支持ARM9的指令集(armv4)就可以(这通常可以通过编译参数来指定使用特定的指令集). 工具链可以从某些网站上下载,并不需要自己去制作。 比如可以访问这个网站: https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabi/
下载: gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz
但是在制作根文件系统时, 实际上我们是编译各种APP, 这些APP要用到一些动态库, 为了方便一般直接使用工具链中lib目录里的库。 新版工具链的lib库一般是支持新的芯片,比如cortex A7,A8,A9,并不支持ARM9。 所以在制作根文件系统、编译APP时我们还得使用比较老的工具链: arm-linux-gcc-4.3.2.tar.bz2
名称 | 链接 |
---|---|
arm-linux-gcc-4.3.2 | 链接:https://pan.baidu.com/s/1aXEAz8ljwMabEOpuhPugsQ 提取码:bfr5 |
gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi | 链接:https://pan.baidu.com/s/15cBI60LcQzgYAf19ytPnOg 提取码:3tso |
u-boot+设备树支持补丁 | 链接:https://pan.baidu.com/s/1XjDFNuI1y1fFAKRr5GFElQ 提取码:7vi5 |
linux内核+设备树支持补丁 | 链接:https://pan.baidu.com/s/1GuUUHSd068xblLH8JAXMAA 提取码:rdft |
根文件系统 | 链接:https://pan.baidu.com/s/11nYC5wFzmget9lHI5b0iBw 提取码:ib2o |
2.编译uboot和kernel#
注:文件系统直接使用第一步获取的文件系统即可
2.1 工具链环境变量配置#
使用哪一个工具链就将其配置到PATH
export PATH=$PATH:/path/to/your_toolchain_path
# eg:
export PATH=$PATH:/home/fhc/linux_driver/gcc-linaro-4.9.4/bin
2.2 编译u-boot#
- 解压u-boot
tar xjf u-boot-1.1.6.tar.bz2
- 打补丁
注意:u-boot-1.1.6_device_tree_for_jz2440.patch这个补丁有Bug,会导致Kernel无法正常启动,不要使用。详情可查看uboot文件夹下的勘误说明。
cd u-boot-1.1.6
patch -p1 < ../u-boot-1.1.6_device_tree_for_jz2440_add_fdt_20181226.patch
- 配置编译
make 100ask24x0_config
make
2.3 编译kernel#
- 查看系统中是否有mkimage
$ whereis mkimage
mkimage: /usr/bin/mkimage /usr/share/man/man1/mkimage.1.gz
如果系统中没有mkimage,则将 u-boot_root_dir/tools/mkimage 文件(u-boot编译后会生成该文件)复制到 /bin/mkimage 即可。
- 安装依赖文件
sudo apt-get install flex bison bc
- 解压内核
tar -xvf linux-4.19-rc3.tar.gz
- 打补丁
cd linux-4.19-rc3
patch -p1 < ../linux-4.19-rc3_device_tree_for_jz2440.patch
- 配置并编译内核
cp config_ok .config
# arch/arm/boot/uImage
make uImage
# arch/arm/boot/dts/jz2440.dtb
make dtbs