Linux学习笔记(12)——linux移植(中)

本文详细介绍了在ARM架构下编译Linux内核的过程,包括修改Makefile,配置自定义内核参数,创建设备树文件,以及使用tftp指令加载内核和设备树到内存中启动内核的方法。
  1. 修改linux目录下的顶层Makefile
 252 ARCH        ?= $(SUBARCH)
 253 CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

把ARCH 和 CROSS_COMPILE这两个变量的值分别赋为arm和arm-linux-gnueabihf-,即把上面2行改为

ARCH		?= arm
CROSS_COMPILE	?= arm-linux-gnueabihf-
  1. 复制imx_v7_mfg_defconfig为自己的配置文件如imx_glen_emmc_defconfig,并进行配置如下:
glen@ubuntu:~/linux/imx6ull/linux/glen_linux$ make imx_glen_emmc_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
  1. 在./arch/arm/boot/dts/Makefile文件添加制作设备树文件的名称
dtb-$(CONFIG_SOC_IMX6ULL) += \
	imx6ull-14x14-ddr3-arm2.dtb \
	imx6ull-14x14-ddr3-arm2-adc.dtb \
	......
	imx6ull-glen-emmc.dtb \
	imx6ull-14x14-evk-gpmi-weim.dtb \
	imx6ull-14x14-evk-usb-certi.dtb \
	imx6ull-9x9-evk.dtb \
	imx6ull-9x9-evk-btwifi.dtb \
	imx6ull-9x9-evk-ldo.dtb
  1. 并且在./arch/arm/boot/dts/目录下复制 imx6ull-14x14-evk.dts 为imx6ull-glen-emmc.dts,文件名与上述Makefile制作设备树文件的名称一致
  2. 制作编译内核脚本,
#!/bin/sh
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_glen_emmc_defconfig
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j4

进行编译,产生如下编译信息,即内核编译与设备树文件都制作成功。

......
  CHK     include/generated/compile.h
  DTC     arch/arm/boot/dts/imx6ull-glen-emmc.dtb
  DTC     arch/arm/boot/dts/imx6ull-14x14-evk-gpmi-weim.dtb
  DTC     arch/arm/boot/dts/imx6ull-14x14-evk-usb-certi.dtb
  DTC     arch/arm/boot/dts/imx6ull-9x9-evk.dtb
  DTC     arch/arm/boot/dts/imx6ull-9x9-evk-btwifi.dtb
  DTC     arch/arm/boot/dts/imx6ull-9x9-evk-ldo.dtb
  DTC     arch/arm/boot/dts/imx6sll-lpddr2-arm2.dtb
  DTC     arch/arm/boot/dts/imx6sll-lpddr3-arm2.dtb
  DTC     arch/arm/boot/dts/imx6sll-lpddr3-arm2-csi.dtb
......
  LD [M]  drivers/input/evbug.ko
  LD [M]  drivers/input/mouse/psmouse.ko
  LD [M]  drivers/input/serio/serport.ko
  LD [M]  drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.ko
  LD [M]  drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko
  LD [M]  drivers/rpmsg/imx_rpmsg_pingpong.ko
  LD [M]  fs/binfmt_misc.ko
  LD [M]  drivers/rpmsg/imx_rpmsg_tty.ko
  LD [M]  fs/fat/msdos.ko
  LD [M]  fs/isofs/isofs.ko
  LD [M]  fs/nls/nls_iso8859-15.ko
  LD [M]  fs/udf/udf.ko
  LD [M]  lib/crc-ccitt.ko
  LD [M]  lib/crc-itu-t.ko
  LD [M]  lib/crc7.ko
  LD [M]  lib/libcrc32c.ko
  AS      arch/arm/boot/compressed/piggy.lzo.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  1. 使用tftp指令加载内核,
    1)在uboot下设置环境变量setenv bootargs 'root=/dev/mmcblk1p2 rootwait rw'
    注:这里这样设置是因为笔者开发板的eMMC的第2个分区已经保存了根文件系统,才可以这样设置,保障后续内核畅通。
    2)加载zImage文件到内存
=> tftp 80800000 zImage
FEC1 Waiting for PHY auto negotiation to complete... done
Using FEC1 device
TFTP from server 192.168.1.55; our IP address is 192.168.1.50
Filename 'zImage'.
Load address: 0x80800000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ########################################################
         1.5 MiB/s
done
Bytes transferred = 5582704 (552f70 hex)

3)加载设备树文件到内存

=> tftp 83000000 imx6ull-glen-emmc.dtb
Using FEC1 device
TFTP from server 192.168.1.55; our IP address is 192.168.1.50
Filename 'imx6ull-glen-emmc.dtb'.
Load address: 0x83000000
Loading: ###
         1.3 MiB/s
done
Bytes transferred = 35969 (8c81 hex)

4)启动内核

=> bootz 80800000 - 83000000
Kernel image @ 0x80800000 [ 0x000000 - 0x552f70 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300bc80

Starting kernel ...

ffffx~
Freescale i.MX Release Distro 4.1.15-2.1.0 ALIENTEK-IMX6U /dev/ttymxc0

ALIENTEK-IMX6U login: random: nonblocking pool is initialized

Freescale i.MX Release Distro 4.1.15-2.1.0 ALIENTEK-IMX6U /dev/ttymxc0

ALIENTEK-IMX6U login:

这里看到内核的启动成功了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值