tiny4412开发环境搭建

本文详细介绍了在Ubuntu系统下搭建tiny4412开发环境的过程,包括老版本和新版本交叉编译环境的设置,uboot的修改与烧录,以及Linux内核和 Busybox 的编译。同时,文章还涉及到了制作ramdisk文件系统,编译dnw-linux工具,以及如何将uImage、dtb和ramdisk下载到内存中,最后成功启动内核。
摘要由CSDN通过智能技术生成

1.开发环境

这一个部分的git下载链接:git目录

注意:
1.开发板自带的文件不支持dts。

1.1 老版本交叉编译环境

1.交叉编译环境
使用压缩包:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz,解压:

$ sudo tar xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /

添加环境变量:

$ vim   ~/.bash_profile
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin/
$ source  ~/.bash_profile

查看是否添加成功,如果能看到如下图片的内容,说明成功添加环境变量。
交叉编译环境

1.2 uboot

使用uboot压缩包uboot_tiny4412-20130729.tgz

$ tar xvf uboot_tiny4412-20130729.tgz
$ cd uboot_tiny4412/
$ make tiny4412_config
$ make

通过以上命令,可以生成u-boot.bin文件。

在ubuntu系统下烧录u-boot.bin到sd卡上:
注意:确保操作的是SD卡。

$ sudo dd if=/dev/zero  of=/dev/sdb   bs=1024 count=102400
$ cd sd_fuse/
$ make
$ cd tiny4412/
$ sudo ./sd_fusing.sh /dev/sdb

烧录完成之后,发现串口之后打印OK就没下文了。
注意,需要打patch,patch文件名为: tiny4412_lioker.patch

打patch方法为:

$ patch -p1  < ../tiny4412_lioker.patch

成功之后,可以看到uboot的打印信息:
uboot打印信息

1.3 硬件环境

1.启动模式

启动模式

主板信息
注意:串口0为调试串口。

1.4 新版本编译环境(支持dts)

1.4.1 交叉编译环境

使用压缩包文件:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

$ tar xvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 
$ sudo vi ~/.bashrc
export PATH=$PATH:/home/wityuan/Desktop/tiny4412/arm-2014.05/bin
$ source ~/.bashrc

查看版本

1.4.2 修改uboot支持dts

1.修改tiny4412/uboot_tiny4412/include/configs/tiny4412.h

其中添加内容:

#define CONFIG_OF_LIBFDT
#define CONFIG_SYS_BOOTMAPSZ (20 << 20)

2.修改arch/arm/config.mk

将其中的内容改为CROSS_COMPILE ?= arm-none-linux-gnueabi-

3.修改uboot中文件内容

1).在common/cmd_bootm.c中的函数do_bootm()中添加内容:

int             iszImage = 0;
...
		iszImage = 1;
		goto after_header_check;

...
#if defined(CONFIG_ZIMAGE_BOOT)
after_header_check:
    if (iszImage) {              
		images.os.os = hdr->ih_os;              
		images.ep = image_get_ep (&images.legacy_hdr_os_copy);      
	}
	//images.os.os = hdr->ih_os;
	//images.ep = image_get_ep (&images.legacy_hdr_os_copy);
#endif

4.编译

$ cd sd_fuse/
$ make
$ cd tiny4412/
$ sudo ./sd_fusing.sh /dev/sdb
1.4.3 制作busybox ramdisk

使用压缩包:busybox-1.17.2-20101120.tgz

$ tar xvf busybox-1.17.2-20101120.tgz
$ cd busybox-1.17.2
$ make
$ make install
1.4.4 编译linux-4.4.1代码

采用支持dts并原生适配tiny4412linux-4.4.1
1).下载内核linux-4.4.1

$ tar xzf linux-4.4.1.tar.gz 

2).配置内核

$ cd linux-4.4.1/
$ vi Makefile
ARCH           ?= arm
CROSS_COMPILE  ?= /work/gcc/arm-2014.05/bin/arm-none-linux-gnueabi-

3). 执行命令

$ make exynos_defconfig

4).修改dts文件,如arch/arm/boot/dts/exynos4412-tiny4412.dts

chosen {
	stdout-path = &serial_0;
    bootargs = "root=/dev/ram0 rw rootfstype=ext4 console=ttySAC0,115200 init=/linuxrc earlyprintk";
};

5).配置内核,支持ramdisk

File systems --->;
    <*> Second extended fs support
Device Drivers
    SCSI device support --->;
        <*> SCSI disk support
    Block devices --->;
        <*>RAM block device support
        (16)Default number of RAM disks
        (8192) Default RAM disk size (kbytes) (修改为8M)
General setup --->;
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

6).配置内核,支持tmpfs

File systems --->;
    Pseudo filesystems --->
        [*] Virtual memory file system support (former shm fs)
        [*] Tmpfs POSIX Access Control Lists

7).编译产生uImage

$ make uImage LOADADDR=0x40008000 -j2

8).编译产生dtb

$ make dtbs

最终,arch/arm/boot/dts/会生成tiny4412上用的设备树镜像文件exynos4412-tiny4412.dtb

注意:
1.如果编译完成之后,发现kernel会崩溃,其与sdhci_2相关,则将dtb中与其相关的dtb先注释掉。

1.4.5 编译dnw-linux工具

下载源码,git 路径
修改Makefile代码:

$ vi src/driver/Makefile 
CURRENT_PATH:=$(shell pwd)
LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build

all:
        $(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:   
        rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

obj-m := secbulk.o
$ make
$ ls src/driver/secbulk.ko   
$ sudo insmod src/driver/secbulk.ko 

验证可以看到:

$ ls /dev/secbulk0 

另外,可以看到可执行程序:

$ ls src/dnw/dnw 

烧写文件,成功可如下:
烧写ramdisk.img

1.4.6 制作ramdisk文件系统

1.使用Busybox-1.26.2代码,并解压:

$ tar xvf busybox-1.26.2.tar.bz2

2.开始构建文件系统
1).创建rootfs目录,例如,可以创建路径为/home/wityuan/Desktop/rootfs
2).执行命令

$ cd /home/wityuan/Desktop/rootfs

3).建立常用目录

$ mkdir  root  bin  sbin  etc  dev  usr  lib  tmp  mnt  sys  proc  var 
$ mkdir  usr/lib  usr/bin  usr/sbin

4).编译busybox

$ cd busybox-1.26.2/
$ make menuconfig ARCH=arm

5).配置busybox,其中Installation Options选择/home/wityuan/Desktop/rootfs

Busybox Settings --->
     Installation Options --->
             Installation Options --->

另外,选择Busybox SettingsDon't use /usr

Busybox Settings --->  
    [* ] Don't use /usr

6). 配置busybox,选择Build BusyBox as a static binary

Busybox Settings---->
   Build Options---->
           [*]Build BusyBox as a static binary

7).配置busybox,配置编译工具链arm-none-linux-gnueabi

Busybox Settings----> 
    Build Options---->
         Cross Compiler prefix

8).保存配置,并执行操作:

$ make 
$ make install

9).添加dev下目录

$ cd /home/wityuan/Desktop/rootfs/
$ cd dev
$ sudo mknod -m 666 console c 5 1
$ sudo mknod -m 666 null c 1 3

10).拷贝busybox下目录中examples/bootfloppy/etc内容到rootfs的etc下。

$ cp  /home/wityuan/Desktop/tiny4412/busybox-1.26.2/examples/bootfloppy/etc/*  /home/wityuan/Desktop/rootfs/etc/ -raf

11).编辑fstab文件

#device        mount-point type       options         dump     fsck order
proc              /proc             proc       defaults        0     0
tmpfs            /tmp             tmpfs     defaults        0     0
sysfs             /sys        sysfs      defaults        0     0
tmpfs            /dev              tmpfs     defaults        0     0
var         /dev              tmpfs     defaults        0     0
ramfs            /dev              ramfs     defaults        0     0

12).编辑profile文件

# /etc/profile: system-wide .profile file for the Bourne shells
USER="root"
LOGNAME=$USER
export HOSTNAME=`/bin/hostname`
export USER=root
export HOME=/root
export PS1="[USER@HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH

13).修改inittab文件

# /etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init

14).配置系统的hostname,在etc目录下执行命令:

$ mkdir  sysconfig
$ cd sysconfig
$ touch  HOSTNAME
$  echo  tiny4412_yuan > HOSTNAME

如果成功启动linux,可以看到如下内容:
hostname

15).配置init.d/rcS文件

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
#mount -n -t usbfs none /proc/bus/usb
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /var/lock
ifconfig lo 127.0.0.1
/bin/hostname -F /etc/sysconfig/HOSTNAME

16).修改init.d/rcS文件权限

$  chmod 777 init.d/rcS

17).制作ramdisk文件系统,可以在rootfs同目录下创建文件mkramdiskfs.sh,内容如下:

#!/bin/bash
rm -rf ramdisk*
sudo dd if=/dev/zero of=ramdisk bs=1k count=8192
sudo mkfs.ext4 -F ramdisk
sudo mkdir -p ./initrd
sudo mount -t ext4 ramdisk ./initrd
sudo cp rootfs/* ./initrd -raf
sudo mknod initrd/dev/console c 5 1
sudo mknod initrd/dev/null c 1 3
sudo umount ./initrd
sudo gzip --best -c ramdisk > ramdisk.gz
sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
rm ramdisk ramdisk.gz initrd  -rf

18).执行以上脚本,即可以生成ramdisk.img文件。

1.4.7 下载uImage,dtb,ramdisk到内存中

1.下载uImage,uImage文件为:arch/arm/boot/uImage

$ dnw 0x40600000

2.下载ramdisk

$ dnw 0x41000000 

3.下载dtb,dtb文件为:arch/arm/boot/dts/exynos4412-tiny4412.dtb

$ dnw 0x42000000

4.启动内核

$ bootm 0x40600000 0x41000000 0x42000000

启动成功后,信息如下:

TINY4412 # bootm 0x40600000 0x41000000 0x42000000
## Booting kernel from Legacy Image at 40600000 ...
   Image Name:   Linux-4.4.1
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4193576 Bytes = 4095 KiB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 41000000 ...
   Image Name:   ramdisk
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    1135203 Bytes = 1108 KiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 42000000
   Booting using the fdt blob at 0x42000000
   Loading Kernel Image ... OK
OK
## Loading init Ramdisk from Legacy Image at 41000000 ...
   Image Name:   ramdisk
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    1135203 Bytes = 1108 KiB
   Load Address: 00000000
   Entr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值