这是一篇licheepi系统的移植笔记
ubuntu18.04 + TF卡(4G) + licheepi-nano(f1c100s)
目录
下面开始移植:
1.对TF卡进行划分
使用gparted对磁盘进行划分,使用以下命令安装该程序:
sudo apt-get install gparted
安装好程序后,是下面红框内的图标,tf卡插上读卡器,连接电脑,点击打开Gparted
这种情况,一般是分区表坏了,点击Device->Create partition table, 类型选择msdos,apply。
修复后,感叹号就没了。
下面开始分区
选中unallocated, 新建,new size设为33, 文件系统设为fat32,add
这个分区用来存放zImage和设备树文件,下面新建第二个分区
选中unallocated, 新建,new size为默认值, 文件系统设为ext4,add
这一步将TF卡剩余的空间全部分给了第二个区域,该区域用来存放根文件系统。点击绿勾,完成分区。
注意,其实现在这块磁盘被分为了3个区:0m~1m, 1m~33m, 33m~end,因为分第一个区的时候,默认从1M开始往后分,所以0~1的区域是没有文件系统的。这个区域就是存放U-boot的区域。
此时,在命令行输入
ls /dev/sd*
可以看到:
说明分区成功。如果没看到,读卡器多拔插几次,一般就能看到了。
到此,TF卡分区结束
2.下载与编译
2.1下载
一共需要下载四个东西:
gcc是我们的编译工具链。
下载u-boot:
git clone https://gitee.com/LicheePiNano/u-boot.git
下载Linux:
git clone --depth=1 -b master https://gitee.com/LicheePiNano/Linux.git
下载buildroot并解压:
wget https://buildroot.org/downloads/buildroot-2021.02.4.tar.gz
tar xvf buildroot-2021.02.4.tar.gz
下载gcc并解压
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
2.2编译
下面进入编译环节:
安装依赖:
sudo apt-get install gcc make cmake rsync wget unzip build-essential git bc swig libncurses-dev libpython3-dev libssl-dev python3-distutils android-tools-mkbootimg -y
sudo apt install vim python python-dev
安装交叉编译工具链
sudo cp -r ./gcc-linaro-7.2.1-201711-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
检验工具链是否安装成功。
2.2.1编译U-boot:
进入uboot目录
git branch -a
git checkout nano-lcd800480
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- f1c100s_nano_defconfig
make ARCH=arm menuconfig
修改menuconfig 中的 boot args:
console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 rw vt.global_cursor_default=0
打开uboot/include/suniv.h,将原有宏定义注释,并添加
#define CONFIG_BOOTCOMMAND "setenv bootm_boot_mode sec; " \
"load mmc 0:1 0x80C00000 suniv-f1c100s-licheepi-nano.dtb; " \
"load mmc 0:1 0x80008000 zImage; " \
"bootz 0x80008000 - 0x80C00000;"
开始编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
编译成功,生成在uboot目录下的u-boot-sunxi-with-spl.bin,这就是我们之后要烧写的uboot文件
2.2.2主线linux编译
进入Linux目录
make ARCH=arm f1c100s_nano_linux_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8 INSTALL_MOD_PATH=out modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8 INSTALL_MOD_PATH=out modules_install
编译生成设备树
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs -j8
内核img文件:./arch/arm/boot/zImage
设备树dtb文件:./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dtb
如果这一步dtb设备树文件没有生成,也可以百度一下其他设备树编译方案,毕竟dts一定是有的。
2.2.3编译根文件系统
进入buildroot目录
make menuconfig
进行配置
- Target options
- Target Architecture (ARM (little endian))
- Target Variant arm926t
- Toolchain
- C library (musl) # 使用musl减小最终体积
- System configuraton
- Use syslinks to /usr .... # 启用/bin, /sbin, /lib的链接
- Enable root login # 启用root登录
- Run a getty after boot # 启用登录密码输入窗口
- (licheepi) Root password # 默认账户为root 密码为licheepi
- Target packages
- Networking applications
-[*]lrzsz # 启用rz,sz命令
参考了这篇blog
荔枝派Nano TF卡运行Linux全流程_Lesg的博客-CSDN博客
在.config文件生成后,可将其中软件包换源,亲测可以提高速度(国内):
BR2_BACKUP_SITE="http://sources.buildroot.net"
BR2_KERNEL_MIRROR="https://mirror.bjtu.edu.cn/kernel/"
BR2_GNU_MIRROR="http://mirrors.nju.edu.cn/gnu/"
BR2_LUAROCKS_MIRROR="https://luarocks.cn"
BR2_CPAN_MIRROR="http://mirrors.nju.edu.cn/CPAN/"
然后
make
编译完成之后,在buildroot-2021.02.4/output/images路径下生成rootfs.tar
这就之后要烧录的根文件系统。
到此,下载与编译部分完成。
3.烧写
下面进入烧写部分
先烧写uboot,烧写到sdb中
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
再烧写zImage 和 dtb设备树文件
将两个文件复制到/dev/sdb1中:
cd cd arch/arm/boot/
sudo cp ./dts/suniv-f1c100s-licheepi-nano.dtb /media/book/9A69-41C8
sudo cp zImage /media/book/9A69-41C8
注意, /media/book/9A69-41C8是你自己相应硬盘分区的挂载位置,可以使用df命令查询。
最后烧写根文件系统,将rootfs.tar解压到/dev/sdb2中
sudo tar xvf rootfs.tar -C /media/book/9f7517b2-33c5-45ac-bd97-0b0a7ac9564f
sync
烧写部分结束
最后上电启动
linux移植成功。