Linux主线内核移植,从0开始运行主线Linux内核

本博客以Xunlong Orangepi Zero为例,运行最新Linux 4.11.0-rc4内核。

[Mainline U-Boot & Mainline Kernel & Rootfs Howto]

Mainline U-Boot

# 克隆u-boot仓库

git clone git://git.denx.de/u-boot.git

# 编译配置

make orangepi_zero_defconfig

# 交叉编译

make V=s -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

编译完成在源码根目录出现目标文件:

u-boot-sunxi-with-spl.bin

Mainline Kernel

# 克隆kernel仓库

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

# 编译配置

make ARCH=arm sunxi_defconfig

# 交叉编译

make V=s -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

编译完成在源码目录出现目标文件:

zImage (arch/arm/boot/zImage)

sun8i-h2-plus-orangepi-zero.dtb (arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dtb)

Rootfs

1\ busybox

# 克隆busybox仓库

git clone git://git.busybox.net/busybox

# 编译配置

make menuconfig

[*] Build busybox as a static binary

(arm-linux-gnueabihf-) Cross Compiler prefix

(./_install) Busybox Installation prefix

# 编译

make

cd _install/

chmod 4755 bin/busybox

接下来的步骤都基于这个_install文件夹。

2\ etc/inittab

创建etc/inittab文件:

# /etc/inittab

::sysinit:/etc/init.d/rcS

ttyS0::sysinit:/bin/ash

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

3\ etc/fstab

创建etc/fstab文件:

# device mount-point type options dump fsck order

proc /proc proc defaults 0 0

tmpfs /tmp tmpfs defaults 0 0

4\ etc/init.d/rcS

创建etc/init.d/rcS文件:

#!/bin/sh

mount -a

5\ 创建设备节点

在dev目录下创建基本的设备节点:

mknod -m 0666 console c 5 1

mknod -m 0666 null c 1 3

mknod ttyS0 c 4 64

Install

将sd卡分区,第一个分区放zImage和dtb文件,第二个分区作为rootfs挂载:

#!/bin/sh

card=/dev/mmcblk0

cardroot=${card}${p}2

# sd卡格式化

dd if=/dev/zero of=${card} bs=1M count=1

# sd卡分区

blockdev --rereadpt ${card}

cat <

1M,16M,c

,,L

EOT

# 格式化分区

mkfs.vfat ${card}${p}1

mkfs.ext4 ${card}${p}2

# 刷入U-Boot

dd if=u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8

# 写入zImage和dtb文件

mount ${card}${p}1 /mnt/

cp zImage /mnt/

cp sun8i-h2-plus-orangepi-zero.dtb /mnt/

umount /mnt/

# 写入rootfs

mount ${cardroot} /mnt/

cp -r /myrootfs /mnt/

umount /mnt

Boot

在U-Boot命令行中执行:

=> setenv bootargs 'console=ttyS0,115200n8 earlyprintk root=/dev/mmcblk0p1 rootwait panic=10'

=> fatload mmc 0 0x46000000 zImage

reading zImage

3657840 bytes read in 226 ms (15.4 MiB/s)

=> fatload mmc 0 0x49000000 sun8i-h2-plus-orangepi-zero.dtb

reading sun8i-h2-plus-orangepi-zero.dtb

14025 bytes read in 30 ms (456.1 KiB/s)

=> bootz 0x46000000 - 0x49000000

Boot Success

成功进入Linux系统,重新挂载可读写文件系统,挂载proc,sys,debug目录:

/ # mount -o remount,rw /

[ 58.970790] EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered

/ # mount -t proc proc /proc

/ # mount -t sysfs sysfs /sys

/ # mount -t debugfs debugfs /sys/kernel/debug

/ # cat /proc/version

Linux version 4.11.0-rc4-00064-g89970a0 (chenziping@techping-pc) (gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11) ) #1 SMP Thu Mar 30 18:55:45 CST 2017

/ #

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值