zoukankan      html  css  js  c++  java
  • JZ2440 u-boot-2016.11、linux-4.17和busybox-1.28.4移植笔记

        2018年5月份开始在JZ2440上陆续移植了u-boot-2016.11、u-boot-spl-2016.11、
    linux-4.17和busybox-1.28.4,其中linux-4.17和busybox-1.28.4是当时官方最新的
    版本,以此作为学习linux两年来的总结。
        遗憾的是,当时在移植过程中没有做每个阶段的笔记,只想尽快的完成。导致现
    在都已经忘的七七八八了,几乎连编译烧录都不记得怎么操作了。移植完成后,由于
    工作忙也一直没有把代码提交到github。刚好最近入手了一部新的笔记本,于是打算
    把资料重新整理下。
        所幸的是,git的提交日志里记录了详细的移植过程。可以通过参考提交记录了
    解如何从零开始移植一个完整的Linux系统。
        相对于JZ2440开发板自带的u-boot-1.1.6、linux-2.6.22.6、fs_qtopia,我自
    己移植的u-boot-2016.11主要增加了独立的SPL引导u-boot,dts设备树的支持,增
    加了spl和dtb的分区,我也尝试重新移植过u-boot-1.1.6,发现JZ2440开发板自带的
    u-boot-1.1.6搞复杂了,修改了很多没必要的东西,看起来十分费解。如果有读者需
    要的可以留言,我会提交到github。
        对于linux-4.17主要是在JZ2440上增加了设备树的支持,基本外设驱动都通过设
    备树来配置。

    github仓库:
    u-boot-2016.11:https://github.com/cgw201410/u-boot-2016.11_jz2440.git
    linux-4.17:    https://github.com/cgw201410/linux-4.17_jz2440.git
    busybox-1.28.4:https://github.com/cgw201410/rootfs_jz2440.git

    一、安装编译工具链
    1. 安装编译工具
       mkdir /usr/local/arm
       解压arm-linux-gcc-4.4.3.tar.gz到/usr/local/arm
       tar -zxvf arm-linux-gcc-4.4.3.tar.gz
      
    2. 设置环境变量
       在~/.bashrc最后添加一行:export PATH=$PATH:/usr/local/arm/4.4.3/bin
       更新环境变量: source ~/.bashrc
     
    二、u-boot/u-boot-spl编译
    1. 编译u-boot/u-boot-spl
       make O=../tmp/build distclean
       make O=../tmp/build JZ2440_defconfig
       make O=../tmp/build all
      
    2. NAND启动的u-boot
       在include/configs/JZ2440.h关闭宏:CONFIG_SYS_BOOT_FROM_NOR_FLASH
       u-boot.bin目录:../tmp/build/u-boot.bin
       u-boot-spl.bin目录:../tmp/build/spl/u-boot-spl.bin
      
    3. NOR启动的u-boot
       在include/configs/JZ2440.h打开宏:CONFIG_SYS_BOOT_FROM_NOR_FLASH
       u-boot.bin目录:../tmp/build/u-boot.bin
       u-boot-spl.bin目录:../tmp/build/spl/u-boot-spl.bin
      
       注:以上两种模式编出来的u-boot-spl.bin是一样的。
      
    三、u-boot/u-boot-spl烧录
    1. NOR启动的u-boot
       通过J-Link直接烧录u-boot.bin,u-boot-spl.bin不用烧录,因为NOR启动时u-boot不需要SPL引导,直接在NOR中启动u-boot。
       参考:《如何烧写S3C2440裸板程序》
      
    2. NAND启动的u-boot
       这里以tftp为例烧录:
       2.1 设置环境变量
       set ipaddr 192.168.xxx.xxx
       set serverip 192.168.xxx.xxx
      
       2.2 烧录
       tftp 0x30000000 u-boot-spl.bin; nand erase 0 0x20000; nand write 0x30000000 0 0x20000
       tftp 0x30000000 u-boot.bin; nand erase.part bootloader; nand write 0x30000000 bootloader
      
    四、环境变量
    1. 进入u-boot命令模式,设置环境变量(除了网络相关,其他默认设置即可)。
       baudrate=115200
       bootcmd=nand read 0x30007FC0 kernel; nand read 0x31000000 dtb; bootm 0x30007FC0 - 0x31000000
       bootdelay=5
       ethact=dm9000
       ethaddr=08:00:3e:26:0a:5b
       ipaddr=192.168.1.10
       mtddevname=rootfs
       mtddevnum=5
       netmask=255.255.255.0
       partition=nand0,5
       serverip=192.168.1.167
       stderr=serial
       stdin=serial
       stdout=serial
      
    2. 分区规划
       device nand0 <jz2440-nand0>, # parts = 6
        #: name                size            offset          mask_flags
        0: spl                 0x00020000      0x00000000      0
        1: bootloader          0x000a0000      0x00020000      0
        2: params              0x00020000      0x000c0000      0
        3: dtb                 0x00020000      0x000e0000      0
        4: kernel              0x00500000      0x00100000      0
        5: rootfs              0x0fa00000      0x00600000      0
       active partition: nand0,0 - (spl) 0x00020000 @ 0x00000000
       defaults:
       mtdids  : nand0=jz2440-nand0
       mtdparts: mtdparts=jz2440-nand0:128k@0(spl),640k(bootloader),128k(params),128k(dtb),5m(kernel),-(rootfs)  
      
    五、编译烧录linux内核
    1. 编译
        make distclean
        make jz2440_defconfig
        make uImage
       
        zImage目录: arch/arm/boot/uImage
        dtb目录:arch/arm/boot/dts/s3c2440-jz2440.dtb
     
    2. 烧录
       tftp 0x30000000 s3c2440-jz2440.dtb; nand erase.part dtb; nand write 0x30000000 dtb
       tftp 0x30000000 uImage; nand erase.part kernel; nand write 0x30000000 kernel
      
    六、制作烧录busybox文件系统
    1. 使用编译好的busybox制作jffs2格式文件系统
       mkfs.jffs2 -n -s 0x800 -e 0x20000 --pad=0x800000 -d rootfs -o fs_root.jffs2
      
    2. 烧录
       tftp 0x30000000 rootfs-1.28.4.jffs2; nand erase.part rootfs; nand write 0x30000000 0x600000 $filesize 
     
    enjoy !
  • 相关阅读:
    单链表的反转是常见的面试题目
    线程状态
    史上最强Android只是总结
    常见的一些算法
    Android LayoutInflater.inflate()使用详解
    Android事件分发机制及滑动冲突解决方案
    Kotlin——高阶函数详解与标准的高阶函数使用
    Kotlin 中的伴生对象和静态成员
    知识点
    Android Studio:多包名打包
  • 原文地址:https://www.cnblogs.com/hackfun/p/11711199.html
Copyright © 2011-2022 走看看