Samsung_tiny4412(笔记)-->linux 3.5,U-Boot,Busybox,SD卡启动环境搭建

/***********************************************************************************
 *
 *      Samsung_tiny4412(笔记)-->linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
 *
 *  声明:
 *      1. 以下所有的shell命令都是在root权限下运行的;
 *      2. minicom(U-Boot)指的是用minicom连接开发板作为U-Boot的终端;
 *      3. 文中在需要往文件中写入内容的时候使用了如下2方式:
 *          1.如果文件不存在,创建文件;如果存在,以覆盖的方式往文件中添加内容:
 *              cat > 文件名 << EOF (结束符)
 *              ...
 *              文件内容...
 *              ...
 *              EOF (输入遇到EOF,cat指令结束,内容将保存在前面指定的文件中)
 *          2.如果文件不存在,创建文件;如果存在,将内容追加到文件尾:
 *              cat >> 文件名 << EOF (结束符)
 *              ...
 *              文件内容...
 *              ...
 *              EOF
 *
 *                                          2015-3-7 阴 深圳 尚观 Sbin 曾剑锋
 **********************************************************************************/

                        \\\\\\\\\\\\\\--*目录*--/////////////
                        |   一. 预热文章;
                        |   二. 内核源码树介绍;
                        |   三. 配置交叉编译器;
                        |   四. 内核编译流程以及原理;
                        |   五. 安装minicom程序;
                        |   六. U-Boot编译;
                        |   七. U-Boot SD卡启动;
                        |   八. Android fast_boot SD卡启动;
                        |   九. 使用Busybox制作文件系统;
                        |   十. NFS配置;
                        \\\\\\\\\\\\\\\\\\\//////////////////

一. 预热文章:
    1. 计算机是如何启动:
        http://www.ruanyifeng.com/blog/2013/02/booting.html
    2. Linux 的启动流程:
        http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html
    3. Unix目录结构的来历:
        http://lists.busybox.net/pipermail/busybox/2010-December/074114.html
        http://www.ruanyifeng.com/blog/2012/02/a_history_of_unix_directory_structure.html

二. 内核源码树介绍:
    1. arch(architecture):  与平台架构相关的文件
    2. block:               块设备IO调度策略实现
    3. COPYING:             版权声明
    4. crypto:              常用加密,校验方法实现
    5. Documentation:       内核官方文档
        zh_CN:              中文翻译文档
    6. drivers:             设备驱动程序
    7. fs(file system):     文件系统实现
    8. include:             内核头文件
    9. init:                内核启动代码
    10. ipc(inter process communication): 进程间通信实现
        1. signal           信号
        2. pipe             无名管道
        3. named pipe(FIFO) 命名管道
        4. message queue    消息队列
        5. shared memory    共享内存
        6. semaphore        信号量
        7. socket           套接字
    11. kernel:             内核核心代码
    12. lib(library):       通用库实现
    13. mm(memory manage):  内存管理方法实现
    14. net:                网络协议栈实现
    15. samples:            内核示例代码
    16. scripts:            内核编译工具
    17. sound:              与音频相关代码
        1. oss(open sound system)
        2. alsa(advance linux sound 

三. 配置交叉编译器:
    1. tar xf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
    2. cp opt/* /opt -r
    3. cat >> ~/.bashrc << EOF (配置环境变量,以方便使用交叉编译器)
        PATH=$PATH:opt/FriendlyARM/toolschain/4.5.1/bin
        EOF
    4.source ~/.bashrc (使前面的配置的PATH生效)

    检查是否已配置好:
    在终端输入: arm后按两下tab出现如下表示正常
        arm-linux-addr2line               arm-none-linux-gnueabi-addr2line
        arm-linux-ar                      arm-none-linux-gnueabi-ar
        arm-linux-as                      arm-none-linux-gnueabi-as
        arm-linux-c++                     arm-none-linux-gnueabi-c++
        arm-linux-cc                      arm-none-linux-gnueabi-cc
        arm-linux-c++filt                 arm-none-linux-gnueabi-c++filt
        arm-linux-cpp                     arm-none-linux-gnueabi-cpp
        arm-linux-g++                     arm-none-linux-gnueabi-g++
        arm-linux-gcc                     arm-none-linux-gnueabi-gcc
        arm-linux-gcc-4.5.1               arm-none-linux-gnueabi-gcc-4.5.1

四. 内核编译流程以及原理:
    1. make menuconfig
        程序会运行: scripts/kconfig/mconf Kconfig,在内核树的根目录下生成: .config文件;
        Kconfig的语法: Documentation/kbuild/kconfig-language.txt
    2. make -j2 zImage
        1. 参数-j2是开启2个线程来编译内核,zImage编译目标;
        2. 程序会运行: scripts/kconfig/conf .config,生成如下文件:
            1. include/config/auto.conf: 用于Makefile中的的模块编译选择;
                CONFIG_MENU3=y
                CONFIG_M2=y
            2. include/generated/autoconf.h: 用于内核源代码的#ifdef/#ifndef;
                #define CONFIG_MENU3 1
                #define CONFIG_M2 1
        3. 根据上面的auto.conf和autoconf.h,将内核中的.c文件编译成.o文件;
        4. 再把每个目录下的.o通过ar命令打包在built-in.o放到上一级目录中,
           所以每个目录都有一个built-in.o
        5. 以此类推,在源码目录的顶级目录会得到一个built-in.o文件并转换为vmlinux.o
        6. vmlinux.o经过链接器链接(ld)得到vmlinux
        7. 因为内核是运行在裸板上的,所以需要去掉elf文件头,得到了二进制Image文件;
        8. Image经过gzip压缩以后得到了最终的zImage文件;
        9. 可以通过nm vmlinux内核符号,查看需要的驱动没有编译进内核,当然也可以通过
           查看内核根目录下的System.map中的地址符号表,这跟U-Boot一样.

五. 安装minicom程序:
    1. yum install minicom
    2. 配置minicom
        1. 在终端: minicom -s
        2. 进入界面后: 选Serial port setup
        3. 当使用usb转串口时,Serial Deveice: /dev/ttyUSB0
            +-------------------------------------------+
            | A -    Serial Device      : /dev/ttyS0    |
            | B - Lockfile Location     : /var/lock     |
            | C -   Callin Program      :               |
            | D -  Callout Program      :               |
            | E -    Bps/Par/Bits       : 115200 8N1    |
            | F - Hardware Flow Control : No            |
            | G - Software Flow Control : No            |
            |                                           |
            |    Change which setting?                  |

        4. 照上面设好后,选 Save setup as dfl保存为默认配置 

六. U-Boot编译:
    1. make tiny4412_config //(对应的内容可在boards.cfg里查询)
    2. make //编译完成后u-boot.bin就是所要的文件,u-boot.bin是把u-boot文件
            //的elf文件信息去除后得来的

七. U-Boot SD卡启动(假设SD卡挂载在/dev/sdb,并且进入U-Boot根目录):
    1. uboot_tiny4412/sd_fuse/tiny4412/sd_fusing.sh /dev/sdb (往SD卡中烧写U-Boot,会自动分如下2个区)
        1. /dev/sdb1
        2. /dev/sdb4
    2. mkfs.vfat /dev/sdb1 (采用vfat格式格式化/dev/sdb1分区,用于放zImage)
    3. mkfs.ext4 /dev/sdb4 (采用ext4格式格式化/dev/sdb4分区,用于放文件系统)
    4. 重新拔插SD卡,把生成上面生成的zImage放入/dev/sdb1分区中,文件系统放在/dev/sdb4分区中;
    5. 将SD卡插入开发板,选择SD卡启动,打开minicom;
    5. 安装dnw: tar xf dnw-linux.tar.gz && cd dnw-linux && make && make install
    6. dnw测试zImage是否可行:
        1. minicom(U-Boot)里面: dnw 0x40008000
        2. PC侧命令:    dnw arch/arm/boot/zImage (在内核根目录下运行命令)
        3. minicom(U-Boot)里面: bootm 0x40008000
    7. minicom(U-Boot)命令查看SD卡中的zImage是否存在: fatls mmc 0:1
    8. minicom(U-Boot)加载zImage到内存0x40008000: fatload mmc 0:1 0x40008000 zImage
    9. minicom(U-Boot)启动内核: bootm 0x40008000
    10. minicom(U-Boot)修改bootcmd: set bootcmd "fatload mmc 0:1 0x40008000 zImage;bootm 0x40008000"
    11. minicom(U-Boot)保存: save
    12. minicom(U-Boot)重启: reset

八. Android fast_boot SD卡启动(需要在前面U-Boot SD卡启动的基础上操作):
    1. minicom输入U-Boot命令即可对SD卡进行分区: fdisk -c 0 320 806 518
    2. 重新分区后,可重新格式化FAT分区,minicom输入U-Boot命令: fatformat mmc 0:1
    3. 使用USB线连接Tiny4412的MICRO_USB口到PC,然后minicom输入U-Boot命令: fastboot
    4. 在PC端将fastboot脚本拷贝到$PATH目录下;
    5. 在PC端输入以下命令进行烧写: fastboot flash kernel zImage(烧写kernel)
    6. zImage传输完的时候minicom会出现假死状态,按ctrl+c退出fastboot命令状态;
    7. minicom(U-Boot)加载zImage到内存0x40008000: movi read kernel 0 40008000
    8. minicom(U-Boot)启动内核: bootm 0x40008000
    9.  minicom(U-Boot)修改bootcmd: set bootcmd "movi read kernel 0 40008000;bootm 0x40008000"
    10. minicom(U-Boot)保存: save
    11. minicom(U-Boot)重启: reset

九. 使用Busybox制作文件系统:
    1. make menucofig,在弹出来的对话框中选择一下内容:
        1. Busybox Settings --> Build Options --> [*] Build BusyBox as a static binary (no shared libs)
        2. Busybox Settings --> Build Options --> (arm-linux-) Cross Compiler prefix
    2. mkdir /disk/A9/filesystem (假设/disk/A9/filesystem为nfs提供的目录)
    3. make && make install CONFIG_PREFIX=/disk/A9/filesystem
    4. cd /disk/A9/filesystem && mdkir dev etc sys proc mnt tmp
    5. cat > etc/init.d/rcS << EOF  (rcS:run command Start)
        mount -t ramfs none /dev
        mount -t sysfs none /sys
        mount -t proc  none /proc
        mount -t tmpfs none /tmp
        /sbin/mdev  -s
        EOF
    6. mknod dev/console c 5 1
    7. cat > etc/inittab << EOF
        ::sysinit:/etc/init.d/rcS
        ttySAC0::askfirst:-/bin/sh #/bin/sh前面的-表示sh会默认加载/etc/profile
        EOF
    8. cat > etc/profile << EOF
        export PS1="[[email protected] \W]# " #设置命令提示前面的那段文字
        EOF
    9. mkdir lib && cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* lib
    10. chmod 777 /disk/A9/filesystem -R --> 给nfs访问所有的权限
    11. 文件系统制作完毕,如果想要将文件系统保存到SD卡中,请保存在第四个分区中;
    12. minicom(U-Boot)里面查看到文件系统的文件夹: ext2ls mmc 0:4 /
    13. SD卡文件系统bootargs设置: set bootargs "root=/dev/mmcblk0p4 console=ttySAC0,115200 lcd=S70"

十. NFS配置:
    1. 关闭防火墙(iptables),关闭selinux
    2. PC侧设置:
        1. 设置PC的IP: ifconfig eth0 192.168.100.22
        2. cat >> /etc/exports << EOF
            /disk/A9/filesystem *(rw)
            EOF
        3. service nfs restart
        4. showmount -e 192.168.100.22   --> 查看该目录是否已经发布出去
    3. U-Boot设置(通过minicom设置)
        1. 开发板IP: 192.168.100.111
        2. NFS服务器IP: 192.168.100.22
        3. 网关: 192.168.100.1
        4. 子网掩码: 225.225.225.0
        5. NFS文件系统启动,U-Boot bootargs设置: set bootargs "root=/dev/nfs nfsroot=192.168.100.22:/disk/A9/filesystem ip=192.168.100.111 console=ttySAC0,115200 lcd=S70"
时间: 2024-08-04 14:13:53

Samsung_tiny4412(笔记)-->linux 3.5,U-Boot,Busybox,SD卡启动环境搭建的相关文章

嵌入式Linux裸机开发(十)——SD卡启动

嵌入式Linux裸机开发(十)--SD卡启动 存储设备分类: 磁存储设备:软盘.硬盘.光盘.CD.磁带 Flash:NandFlash.NorFlash 缺点:时序复杂,无坏块处理机制,接口不统一 NandFlash:MLC(可靠性差,容量大).SLC(可靠性高.容量小) 扩展卡式Flash:SD卡.MMC卡.MicroSD(TF卡) 内部为NnadFlash存储颗粒,外部封装了接口,接口标准统一.通用. 缺点:频繁使用导致卡槽接触不可靠 iNand.MoviNand.eSSD: 内部为Nand

[i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统

转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/details/44536447 参照2:http://blog.csdn.net/girlkoo/article/details/44626011 2017-02-04 22:52:54 目录: 本文的目的是,完成一个从sd卡启动的一个纯净版的linux系统移植,其实就是一个很裸的根文件系统,后期有空会试着把

制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统

转自网络,供学习记录使用,红色部分是我实验时,这篇文章和网站稍有出入的地方. 目的:制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统 在http://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/quickstart/zynq(姑且把这个链接成为链接1吧)链接中找到 图1 点击绿色字体的链接,下载镜像原始文件.这里有不同时期的版本,本说明中选择 图2 下载的原始文件为:2014_R2-

Linux平台下Python的安装及IDE开发环境搭建

Linux平台下Python的安装及IDE开发环境搭建 1.Python安装 Python有2.X和3.X两个版本,由于2.X的版本较稳定,使用者也较多,本文选择使用Python 2.X版本. 安装步骤: (1) 下载Python安装包:https://www.python.org/downloads/ (2)  解压安装包:tar zxvf Python-2.7.10.tgz (3)  编译:./compile (4)  安装:make && make install 说明: ① 这样p

linux下实现U盘和sd卡的自动挂载

<span style="font-family:Arial, Helvetica, sans-serif;"><strong>目的:使U盘和sd卡在linux系统中进行插入和拔除时能自动挂载和卸载,不需要手动mount和umount.</strong></span> <span style="font-family:Arial, Helvetica, sans-serif;"><strong>

arm Linux 如何自动检测并mount SD卡,以及如何得知已经mount

一.土八路做法: SD 卡一旦插入系统,内核会自动在/dev/下创建设备文件:sdcard. 但有时可能时用户在拨出卡前并没有umount的话,第二次插卡进去后系统创建的就不是sdcard设备文件了,而是mmcblk0, mmcblk1p1, mmcblk2p1, 或mmcblk3p1. 所以只需用if ( fopen("/dev/sdcard", "r") == NULL ) 来检测SD卡是否已经被内核捉到.然后就可以mount ....以及你想干的事情了. 如何

用QEMU模拟运行uboot从SD卡启动Linux

平台:Qemu + vexpress-a9 u-boot:u-boot-2019.10 Linux:linux-4.14.13 之前介绍过用Qemu模拟运行uboot,然后从网络启动linux(用Qemu模拟vexpress-a9 (三)--- 实现用u-boot引导Linux内核),下面介绍用Qemu运行uboot,然后将存放在虚拟出来的SD卡里加载linux kernel.设备树,并运行. 一.编译uboot 下载最新的uboot,编译vexpress-a9: make ARCH=arm C

RoboCup仿真3D TC笔记(2014年合肥中国公开赛 仿真3D比赛环境搭建)

所谓“TC“,就是Technology Committee(技术委员),讲的好像很厉害,实则就一“网管”. TC的技术含量其实不高,但是涉及的东西很多很杂,网上零零散散的都有,在这里我想总的整理一下,算是栽颗小树吧…… 注:如果你只想自己装个环境写代码的话,请不要看以下写的,真的是无比之烦,建议你看官网的这个或其他博客: http://simspark.sourceforge.net/wiki/index.php/Installation_on_Linux: 接下来,我将按以下流程讲解一下Rob

zedboard烧写SD卡启动linux镜像

1. 先把SD卡格式化,然后把镜像文件拷贝到SD卡,下面应该是没有文件系统的 2. 插上SD卡,Zedboard设置启动模式,有5个跳线帽,配置如下,上电启动 3. 看下串口的输出 原文地址:https://www.cnblogs.com/429512065qhq/p/8782601.html