博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
阅读量:6384 次
发布时间:2019-06-23

本文共 9572 字,大约阅读时间需要 31 分钟。

/*********************************************************************************** *                     *                      linux 3.5,U-Boot,Busybox,SD卡启动环境搭建 * *  声明: *      1. 本系列文档是在vim下编辑,请尽量是用vim来阅读,在其它编辑器下可能会 *          不对齐,从而影响阅读. *      2. 以下所有的shell命令都是在root权限下运行的; *      3. minicom(U-Boot)指的是用minicom连接开发板做为U-Boot的终端; *      4. 文中在需要往文件中写入内容的时候使用了如下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生效)    5. 检查是否已配置好:        在终端输入: 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        1. 程序会运行: scripts/kconfig/mconf Kconfig        2. 配置完保存后,在内核树的根目录下生成: .config文件,是隐藏文件;        3. 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. 安装minicom: yum install minicom    2. 通过USB转串口线连接开发板与电脑,运行命令: ls /dev/        找到对应的设备节点,本文假设开发板对应的设备节点是:/dev/ttyUSB0    3. 配置minicom:        1. 在终端: minicom -s        2. 进入界面后: 选Serial port setup             3. 当使用usb转串口时,Serial Deveice: /dev/ttyUSB0            +-------------------------------------------+            | A -    Serial Device      : /dev/ttyUSB0  |            | 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. 往SD卡中烧写U-Boot: uboot_tiny4412/sd_fuse/tiny4412/sd_fusing.sh /dev/sdb         运行结果会自动分如下2个区:            1. /dev/sdb1            2. /dev/sdb4    2. 采用vfat格式格式化/dev/sdb1分区,用于放zImage:   mkfs.vfat /dev/sdb1     3. 采用ext4格式格式化/dev/sdb4分区,用于放文件系统: mkfs.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目录下,当然你也许会没有fastboot,问度娘要吧;    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制作文件系统(本文假设nfs文件系统在PC端的/disk/A9/filesystem文件加下):    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 -p (假设/disk/A9/filesystem为nfs提供的目录)    3. make && make install CONFIG_PREFIX=/disk/A9/filesystem    4. cd /disk/A9/filesystem && mkdir 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        #采用设备模型进行创建设备节点的必须加上,热插拔处理,为后面的是用驱动模型作准备        echo "/sbin/mdev" > /proc/sys/kernel/hotplug        /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="[^_^ \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配置(本文假设PC机的IP在局域网100段):    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"

 

转载地址:http://gskha.baihongyu.com/

你可能感兴趣的文章
使用Visual Assistant X创建C程序注释模板
查看>>
linux网络配置
查看>>
浏览器兼容-哪些兼容
查看>>
linux 基础学习之 磁盘,分区,MBR与GPT
查看>>
将SpringBoot默认使用的tomcat替换为undertow
查看>>
js中array的sort()方法!
查看>>
jdbc mysql 取数,突然取不到数据,数据库中有数据
查看>>
Ubuntu安装c++编译器
查看>>
ASP.NET的主题
查看>>
volcanol_windows_program_via_c_汇总贴
查看>>
JavaScript --- Set 集合结构详解
查看>>
nginx服务调优
查看>>
JAVA--异常(1)
查看>>
进军博客园了
查看>>
placeholder样式
查看>>
python创建与遍历List二维列表
查看>>
Java中的String类和编码转换
查看>>
简单工厂模式【java版】
查看>>
[转载]Android Layout标签之-viewStub,requestFocus,merge,include
查看>>
洛谷P3711 仓鼠的数学题(伯努利数+多项式求逆)
查看>>