F1C100S驱动移植全流程

626 阅读3分钟

F1C100S驱动移植全流程

内容整理自互联网,仅供学习记录,参看请谨慎。

准备工作

下载Ubuntu镜像:Index of /ubuntu-releases/ (ustc.edu.cn)

安装Ubuntu虚拟机

安装Ubuntu虚拟机增强功能(传文件和文字拷贝)

安装.c文件编译器:sudo apt-get install gcc

Uboot移植

参考资料:

  1. (39条消息) 荔枝派nano上手笔记(一)移植Uboot_Yfw&武的博客-CSDN博客_荔枝派nano

安装交叉编译链

//获取7.2.1版本
wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz

//解压
tar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz

//将交叉编译链复制到 /opt/目录下
sudo cp -r ./gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi /opt/

//配置环境变量
sudo vim /etc/bash.bashrc
添加如下内容:
PATH="$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin"

//更新配置
source /etc/bash.bashrc

//验证安装结果
arm-linux-gnueabi-gcc -v

下载荔枝派nano的Uboot源码

//安装git下载工具
sudo apt-get install git

//下载源码
git clone https://github.com/Lichee-Pi/u-boot.git

//进入下载的源码目录
cd u-boot

//查看分支信息
git branch -a

//切换到荔枝派nano的分支(如果已经在f1c100s中了就不用执行该步骤)
git checkout nano-v2018.01

Uboot文件夹目录结构

. ├── api //封装一些平台无关的操作,如字符串打印,显示,网络,内存 ├── arch //以平台架构区分 │ ├──arm │ │ └──cpu │ │ │ └──arm926ejs │ │ │ │ └──sunxi //cpu相关的一些操作,如定时器读取 │ │ │ │ │ └──u-boot-spl.lds //spl的放置方法 │ │ └──dts │ │ │ └──suniv-f1c100s-licheepi-nano.dts // f1c100s芯片的一些配置 │ │ │ └──suniv-f1c100s-licheepi-nano.dtb │ │ │ └──suniv-f1c100s.dtsi │ │ │ └──suniv.dtsi │ │ └──lib //一些库文件 │ │ └──mach-sunxi │ │ │ └──board.c //board_init_f │ │ │ └──dram_sun4i.c //ddr的操作,复位,时钟,延时,odt,etc. │ │ │ └──dram_helpers.c //ddr的设置及读写测试 ├── board │ ├──sunxi │ │ └──board.c //sunxi_board_init 入口 │ │ └──dram_suniv.c //DRAM的一些默认参数 ├── cmd //Uboot命令行的一些命令 ├── common //含spl ├── configs //menuconfig里的默认配置,比如各类驱动适配 │ ├── licheepi_nano_defconfig │ ├── licheepi_nano_spiflash_defconfig ├── disk //硬盘分区的驱动 ├── doc ├── drivers //外设驱动 ├── dts ├── examples ├── fs //多种文件系统 ├── include │ ├──configs │ │ └──sunxi_common.h //预配置的参数,如串口号等 │ │ └──suniv.h ├── lib //加密压缩等算法 ├── net //nfs,tftp等网络协议 ├── post ├── scripts

//选择配置文件Uboot(选择执行)
带SPIFlash:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_spiflash_defconfig
不带SPIFlash:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_defconfig

# 开始编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8

Uboot目录下生成u-boot-sunxi-with-spl.bin文件

Linux内核移植

参考资料:

  1. (39条消息) lichee nano 荔枝派入门——linux内核_学游泳的鱼465的博客-CSDN博客_lichee nano
//配置编译设置
ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make sunxi_defconfig

//调整编译参数
make menuconfig

//保存后退出

# 编译内核,生成zImage,在/arch/arm/boot/文件夹下
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8

# 编译dts,生成dtb文件,在/arch/arm/boot/dts/文件夹下
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs -j8

# 编译内核模块,并输出到out目录
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=out modules_install

Buildroot根文件系统移植

参考资料:

  1. (39条消息) 基于荔枝派Nano学习Buildroot的构建过程_燕卫博的博客-CSDN博客
//下载Buildroot,并解压,下载地址:
https://buildroot.org/downloads/

//进入解压后的目录,进行配置
//配置过程请看参考资料1
make menuconfig

//保存后退出,执行编译
make

//编译完成后在/output/images/目录下生成rootfs.tat

//解压rootfs.tar到SD卡的rootfs分区 
sudo tar xvf rootfs.tar -C /media/dlxy/rootfs

烧录文件

//打开虚拟机,下载sd卡分区软件gparted:sudo apt-get install gparted

//使用软件将sd卡格式化,然后再分区(BOOT和rootfs)

烧写u-boot:
//sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

拷贝 zImage 、sun8i-v3s-licheepi-zero.dtb到BOOT分区

解压rootfs.tar到rootfs分区:
sudo tar xvf rootfs.tar -C /media/dlxy/rootfs

PS:可以先编译Buildroot,用Buildroot下载的编译链工具来编译Uboot和Linux