基于linux系统的CAN总线移动机器人-内核移植

10 篇文章 0 订阅
8 篇文章 0 订阅

上节重点讲解了如何移植 uboot 到 I.MX6U开发板上,本节开始我们就开始移植Linux 内核。先来看一下 Linux 内核的顶层 Makefile 文件,因为顶层 Makefile 控制着Linux 内核的编译流程。
Linux 由 Linux 基金会管理与发布,Linux 官网为 https://www.kernel.org,所以你想获取最新的
Linux 版本就可以在这个网站上下载,网站界面如图
在这里插入图片描述
可以看出最新的稳定版 Linux 已经到了 5.1.8,但是大家没必要追新,因为 4.x 版本的Linux 和 5.x 版本没有本质上的区别,5.x 更多的是加入了一些新的平台、新的外设驱动而已。NXP 会从https://www.kernel.org 下载某个版本的Linux 内核,然后将其移植到自己的 CPU 上,测试成功以后就会将其开放给 NXP 的 CPU 开发者。开发者下载 NXP 提供的 Linux 内核, 然后将其移植到自己的产品上。
本节的移植我们就使用 NXP 提供的Linux 源码。源码在板子的光盘里可以找到。
编译内核之前需要先在 ubuntu 上安装 lzop 库,否则内核编译会失败!命令如下:

sudo apt-get install lzop	

先看一下如何编译 Linux 源码,这里编译以 I.MX6U-ALPHA 开发板移植好的 Linux 源码, 在板子的光盘里可以找到。
在 Ubuntu 中新建名为“ alientek_linux ” 的文件夹, 然后将 linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2 这个压缩包拷贝到前面新建的 alientek_linux 文件夹中并解压,命令如下:

tar -vxjf linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2

以 EMMC 核心板为例, 讲解一下如何编译出对应的 Linux 镜像文件。新建名为“mx6ull_alientek_emmc.sh”的 shell 脚本,然后在这个 shell 脚本里面输入如下所示内容:

1	#!/bin/sh
2	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
3	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
4	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
5	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

使用 chmod 给予 mx6ull_alientek_emmc.sh 可执行权限,然后运行此 shell 脚本,命令如下:

./mx6ull_alientek_emmc.sh

编译的时候会弹出Linux 图形配置界面
在这里插入图片描述
Linux 的图行界面配置和 uboot 是一样的,这里我们不需要做任何的配置,直接按两下 ESC键退出,退出图形界面以后会自动开始编译 Linux。等待编译完成。
编译完成以后就会在 arch/arm/boot 这个目录下生成一个叫做 zImage 的文件,zImage 就是我们要用的Linux 镜像文件。另外也会在 arch/arm/boot/dts 下生成很多.dtb 文件,这些.dtb 就是设备树文件。
编译 Linux 内核的时候可能会提示“recipe for target ‘arch/arm/boot/compressed/piggy.lzo’failed。

看一下编译脚本 mx6ull_alientek_emmc.sh 的内容

1	#!/bin/sh
2	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
3	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
4	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
5	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

第 2 行,执行“make distclean”,清理工程,所以 mx6ull_alientek_emmc.sh 每次都会清理一下工程。如果通过图形界面配置了 Linux,但是还没保存新的配置文件,那么就要慎重使用mx6ull_alientek_emmc.sh 编译脚本了,因为它会把你的配置信息都删除掉! 第 3 行,执行“make xxx_defconfig”,配置工程。
第 4 行,执行“make menuconfig”,打开图形配置界面,对 Linux 进行配置,如果不想每次编译都打开图形配置界面的话可以将这一行删除掉。
第 5 行,执行“make”,编译 Linux 源码。
可以看出,Linux 的编译过程基本和uboot 一样,都要先执行“make xxx_defconfig”来配置一下,然后在执行“make”进行编译。如果需要使用图形界面配置的话就执行“make menuconfig”。
正点原子提供的Linux 源码进行解压,解压完成以后的目录如图在这里插入图片描述
在 Ubuntu 中编译一下 Linux。编译完成以后使用 tar 压缩命令对其进行压缩并使用 Filezilla 软件将压缩后的 uboot 源码拷贝到Windows 下。
在这里插入图片描述
在分析 Linux 的顶层 Makefile 之前,先创建 VSCode 工程,创建过程和 uboot 一样。创建好以后将文件.vscode/settings.json 改为如下所示内容:

{	
	"search.exclude": {
	"**/node_modules": true,
	"**/bower_components": true,
	"**/*.o":true,
	"**/*.su":true,
	"**/*.cmd":true,
	"Documentation":true,
	
	/* 屏蔽不用的架构相关的文件 */
	"arch/alpha":true,
	"arch/arc":true,
	"arch/arm64":true,
	"arch/avr32":true,
	"arch/[b-z]*":true,
	"arch/arm/plat*":true,
	"arch/arm/mach-[a-h]*":true,
	"arch/arm/mach-[n-z]*":true,
	"arch/arm/mach-i[n-z]*":true,
	"arch/arm/mach-m[e-v]*":true,
	"arch/arm/mach-k*":true,
	"arch/arm/mach-l*":true,
	
	/* 屏蔽排除不用的配置文件 */
	"arch/arm/configs/[a-h]*":true,
	"arch/arm/configs/[j-z]*":true,
	"arch/arm/configs/imo*":true,
	"arch/arm/configs/in*":true,
	"arch/arm/configs/io*":true,
	"arch/arm/configs/ix*":true,
31
32	/* 屏蔽掉不用的 DTB 文件 */
33	"arch/arm/boot/dts/[a-h]*":true,
34	"arch/arm/boot/dts/[k-z]*":true,
35	"arch/arm/boot/dts/in*":true,
36	"arch/arm/boot/dts/imx1*":true,
37	"arch/arm/boot/dts/imx7*":true,
38	"arch/arm/boot/dts/imx2*":true,
39	"arch/arm/boot/dts/imx3*":true,
40	"arch/arm/boot/dts/imx5*":true,
41	"arch/arm/boot/dts/imx6d*":true,
42	"arch/arm/boot/dts/imx6q*":true,
43	"arch/arm/boot/dts/imx6s*":true,
44	"arch/arm/boot/dts/imx6ul-*":true,
45	"arch/arm/boot/dts/imx6ull-9x9*":true,
46	"arch/arm/boot/dts/imx6ull-14x14-ddr*":true, 47	},
48	"files.exclude": {
49	"**/.git": true,
50	"**/.svn": true,
51	"**/.hg": true,
52	"**/CVS": true,
53	"**/.DS_Store": true,
54	"**/*.o":true,
55	"**/*.su":true,
56	"**/*.cmd":true,
57	"Documentation":true, 58
59	/* 屏蔽不用的架构相关的文件 */
60	"arch/alpha":true,
61	"arch/arc":true,
62	"arch/arm64":true,
63	"arch/avr32":true,
64	"arch/[b-z]*":true,
65	"arch/arm/plat*":true,
66	"arch/arm/mach-[a-h]*":true,
67	"arch/arm/mach-[n-z]*":true,
68	"arch/arm/mach-i[n-z]*":true,
69	"arch/arm/mach-m[e-v]*":true,
70	"arch/arm/mach-k*":true,
71	"arch/arm/mach-l*":true, 72
73	/* 屏蔽排除不用的配置文件 */
74			"arch/arm/configs/[a-h]*":true,
75			"arch/arm/configs/[j-z]*":true,
76			"arch/arm/configs/imo*":true,
77			"arch/arm/configs/in*":true,
78			"arch/arm/configs/io*":true,
79			"arch/arm/configs/ix*":true,
80			
81			/* 屏蔽掉不用的 DTB 文件 */
82			"arch/arm/boot/dts/[a-h]*":true,
83			"arch/arm/boot/dts/[k-z]*":true,
84			"arch/arm/boot/dts/in*":true,
85			"arch/arm/boot/dts/imx1*":true,
86			"arch/arm/boot/dts/imx7*":true,
87			"arch/arm/boot/dts/imx2*":true,
88			"arch/arm/boot/dts/imx3*":true,
89			"arch/arm/boot/dts/imx5*":true,
90			"arch/arm/boot/dts/imx6d*":true,
91			"arch/arm/boot/dts/imx6q*":true,
92			"arch/arm/boot/dts/imx6s*":true,
93			"arch/arm/boot/dts/imx6ul-*":true,
94			"arch/arm/boot/dts/imx6ull-9x9*":true,
95			"arch/arm/boot/dts/imx6ull-14x14-ddr*":true,
96		}	
97	} 		

创建好 VSCode 工程以后就可以开始分析 Linux 的顶层 Makefile 了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Robot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值