【TINY4412】LINUX移植笔记:(1)移植前准备

【TINY4412】LINUX移植笔记:(1)移植前准备

宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64
目标板[底板]: Tiny4412SDK - 1506
目标板[核心板]: Tiny4412 - 1412
LINUX内核: 4.12.0
交叉编译器: gcc-arm-none-eabi-5_4-2016q3
日期: 2017-7-5 18:11:47
作者: SY

下载Linux源码

  • 登录Linux Kernel官方网站,下载内核源码kernellinux-4.11.7.tar.xz
  • 传送文件到Linux:scp Desktop/linux-4.11.7.tar.xz sy@192.168.2.217:/opt/share/
  • 解压缩:tar xf linux-4.11.7.tar.xz -C ../

安装交叉编译工具链

到GUN官网下载最新的交叉编译工具链:gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2

下载地址:gcc-arm-none-eabi

拷贝文件到Linux

sh-3.2# scp Downloads/gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2 sy@192.168.2.217:/opt/share
root@ubuntu:tar xf gcc-arm-none-eabi-5_4-2016q3-20160926-linux.tar.bz2 -C ../
root@ubuntu:vim ~/.bashrc
在末尾增加 export PATH=$PATH:/opt/gcc-arm-none-eabi-5_4-2016q3/bin/
root@ubuntu:source ~/.bashrc

测试是否安装成功

root@ubuntu: arm-none-eabi-gcc -v
提示:No such file or directory
root@ubuntu: apt-get install lsb-core
root@ubuntu: arm-none-eabi-gcc -v
Using built-in specs.
 COLLECT_GCC=arm-none-eabi-gcc
 COLLECT_LTO_WRAPPER=/opt/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/lto-wrapper
 Target: arm-none-eabi
 Configured with: /home/build/work/GCC-5-build/src/gcc/configure --target=arm-none-eabi --prefix=/home/build/work/GCC-5-build/install-native --libexecdir=/home/build/work/GCC-5-build/install-native/lib --infodir=/home/build/work/GCC-5-build/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/home/build/work/GCC-5-build/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/home/build/work/GCC-5-build/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/home/build/work/GCC-5-build/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/home/build/work/GCC-5-build/install-native/arm-none-eabi --build=i686-linux-gnu --host=i686-linux-gnu --with-gmp=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-mpfr=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-mpc=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-isl=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-cloog=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-libelf=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' --with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r,armv8-m.base,armv8-m.main
 Thread model: single
 gcc version 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496] (GNU Tools for ARM Embedded Processors) 

出现上述输出,说明工具链安装成功。

工具链最好使用最新版,因为Linux内核是最新版的。否则出现以下警告:

/tmp/ccWBpfhy.s: Assembler messages:
/tmp/ccWBpfhy.s:1237: Error: garbage following instruction -- `dmb ish'
/tmp/ccWBpfhy.s:1248: Error: unknown pseudo-op: `.arch_extension'
/tmp/ccWBpfhy.s:1249: Error: bad instruction `pldw [r3,#0]'
/tmp/ccWBpfhy.s:1275: Error: garbage following instruction -- `dmb ish'
scripts/Makefile.build:294: recipe for target 'init/do_mounts.o' failed
make[1]: *** [init/do_mounts.o] Error 1
make[1]: *** Waiting for unfinished jobs....

64 位系统安装交叉编译器

root@ubuntu:/opt# ls
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
root@ubuntu:/opt# tar xf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 
root@ubuntu:/opt# rm -rf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
root@ubuntu:/opt# cd /opt/arm-2014.05/bin/

测试

root@ubuntu:/opt/arm-2014.05/bin# ./arm-none-linux-gnueabi-gcc -v
bash: ./arm-none-linux-gnueabi-gcc: No such file or directory

安装 32 位库

root@ubuntu:/opt/arm-2014.05/bin# apt-get install lib32z1

测试

root@ubuntu:/opt/arm-2014.05/bin# ./arm-none-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/arm-2014.05/bin/../libexec/gcc/arm-none-linux-gnueabi/4.8.3/lto-wrapper
Target: arm-none-linux-gnueabi
Configured with: /scratch/maciej/arm-linux-2014.05-rel/src/gcc-4.8-2014.05/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2014 -D__CS_SOURCERYGXX_MIN__=5 -D__CS_SOURCERYGXX_REV__=29' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2014.05-29' --with-bugurl=https://sourcery.mentor.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/libc --with-gmp=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-isl=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-cloog=/scratch/maciej/arm-linux-2014.05-rel/obj/pkg-2014.05-29-arm-none-linux-gnueabi/arm-2014.05-29-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-libatomic --disable-libssp --enable-poison-system-directories --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/maciej/arm-linux-2014.05-rel/install/opt/codesourcery/arm-none-linux-gnueabi/bin SED=sed
Thread model: posix
gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29) 

添加到环境变量

root@ubuntu:/opt/arm-2014.05/bin# vim ~/.bashrc 
export PATH=$PATH:/opt/arm-2014.05/bin/
root@ubuntu:/opt/arm-2014.05/bin# source ~/.bashrc
root@ubuntu:/opt/arm-2014.05/bin# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/bin/:/usr/include/:/usr/local/arm-gdb/bin/:/root/bin:/usr/bin/:/usr/include/:/usr/local/arm-gdb/bin/:/opt/arm-2014.05/bin/:/root/bin

添加版本管理GIT

  • 安装GIT:apt-get install git
  • 添加版本管理:
root@ubuntu:/opt/linux-4.12# git init
root@ubuntu:/opt/linux-4.12# git add -A
root@ubuntu:/opt/linux-4.12# git commit -m "2017-7-5 18:59:01【初始提交】"
root@ubuntu:/opt/linux-4.12# git remote add origin https://github.com/dasuimao/LINUX-Tiny4412.git
root@ubuntu:/opt/linux-4.12# git push -u origin master

编译内核

安装库文件:apt-get install build-essential ncurses-dev libssl-dev build-essential ncurses-dev xz-utils kernel-package

拷贝默认配置文件

root@ubuntu:/opt/linux-4.12# cp arch/arm/configs/exynos_defconfig .config

写一个自动进入menuconfig脚本

  1 #!/bin/bash
  2 
  3 # Developer: SY
  4 # Data     : 2017-7-5 19:38:11
  5 # Function : Auto enter config page
  6 
  7 echo "------------------------------"
  8 echo "make menuconfig"
  9 make ARCH=arm menuconfig
 10 
 11 echo "over"

增加权限:chmod 755 auto_menuconfig.sh

root@ubuntu:/opt/linux-4.12# ./auto_menuconfig.sh
|-- General setup  --->
    |-- (arm-none-eabi-) Cross-compiler tool prefix 

写一个自动make脚本

root@ubuntu:/opt/linux-4.12# cat make_auto.sh 
#!/bin/bash

# Developer: SY
# Data     : 2017-7-5 19:30:37
# Function : Auto Make Project

echo "------------------------------"
echo "make"
make ARCH=arm uImage LOADADDR=0X40008000 -j4

echo "make dts"
make ARCH=arm dtbs

echo "backup config"
cp .config tiny4412_defconfig

echo "over"

编译

root@ubuntu:/opt/linux-4.12# ./auto_make.sh 

------------------------------
make
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     scripts/mod/devicetable-offsets.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/bounds.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
"mkimage" command not found - U-Boot images will not be built
arch/arm/boot/Makefile:79: recipe for target 'arch/arm/boot/uImage' failed
make[1]: *** [arch/arm/boot/uImage] Error 1
arch/arm/Makefile:333: recipe for target 'uImage' failed
make: *** [uImage] Error 2
backup config
over

提示缺少工具mkimage,在U-BOOT中找到 ./tools/mkimage

root@ubuntu:/opt/u-boot-2017.03# cp tools/mkimage /bin/

再次编译


root@ubuntu:/opt/linux-4.12# ./auto_make.sh 
------------------------------
make
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     scripts/mod/devicetable-offsets.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/bounds.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-4.12.0-g193655b
Created:      Wed Jul  5 20:50:01 2017
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    4792200 Bytes = 4679.88 KiB = 4.57 MiB
Load Address: 40008000
Entry Point:  40008000
  Kernel: arch/arm/boot/uImage is ready
backup config
over
root@ubuntu:/opt/linux-4.12# 

写一个自动烧录的脚本dfu.sh

root@ubuntu:/opt/linux-4.12# cat ./dfu.sh 
#!/bin/bash

# Developer: SY
# Data     : 2017-7-8 12:21:09
# Function : DFU 

echo "------------------------------"
echo "DFU List"
dfu-util -l

echo "------------------------------"
echo "DFU uImage"
dfu-util -D arch/arm/boot/uImage -a 0

echo "------------------------------"
echo "DFU exynos4412-tiny4412.dtb"
dfu-util -D arch/arm/boot/dts/exynos4412-tiny4412.dtb -a 1

echo "------------------------------"
echo "over"

观察dfu-util命令

root@ubuntu:/opt/linux-4.12# dfu-util --help
Usage: dfu-util [options] ...
  -h --help                     Print this help message
  -V --version                  Print the version number
  -v --verbose                  Print verbose debug statements
  -l --list                     List currently attached DFU capable devices
  -e --detach                   Detach currently attached DFU capable devices
  -E --detach-delay seconds     Time to wait before reopening a device after detach
  -d --device <vendor>:<product>[,<vendor_dfu>:<product_dfu>]
                                Specify Vendor/Product ID(s) of DFU device
  -p --path <bus-port. ... .port>       Specify path to DFU device
  -c --cfg <config_nr>          Specify the Configuration of DFU device
  -i --intf <intf_nr>           Specify the DFU Interface number
  -S --serial <serial_string>[,<serial_string_dfu>]
                                Specify Serial String of DFU device
  -a --alt <alt>                Specify the Altsetting of the DFU Interface
                                by name or by number
  -t --transfer-size <size>     Specify the number of bytes per USB Transfer
  -U --upload <file>            Read firmware from device into <file>
  -Z --upload-size <bytes>      Specify the expected upload size in bytes
  -D --download <file>          Write firmware from <file> into device
  -R --reset                    Issue USB Reset signalling once we're finished
  -s --dfuse-address <address>  ST DfuSe mode, specify target address for
                                raw file download or upload. Not applicable for
                                DfuSe file (.dfu) downloads

root@ubuntu:/opt/linux-4.12# dfu-util -l
dfu-util 0.8

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2014 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to dfu-util@lists.gnumonks.org

Found DFU: [18d1:4e30] ver=9999, devnum=8, cfg=1, intf=0, alt=1, name="exynos4412-tiny4412.dtb", serial="UNKNOWN"
Found DFU: [18d1:4e30] ver=9999, devnum=8, cfg=1, intf=0, alt=0, name="uImage", serial="UNKNOWN"

需要在开发板打开DFU服务器,电脑端便通过dfu-util -l获取开发板端的参数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值