/*****************uboot移植
******************/
【1】获取u-boot源码1. u-boot官方网站https://ftp.denx.de/pub/u-boot/2. 开发板厂家 3. 芯片厂家4. 主管领导(推荐)第1种和第2,3,4种有何区别?芯片厂家没有将芯片的uboot支持的源码开源到u-boot官方源码中,uboot官方源码不支持此处理器。S5P6818芯片三星没有将支持此处理器的源码开源到uboot官方,uboot官方获取的uboot源码不支持S5P6818芯片。此课程使用的fs6818的uboot源码:u-boot-2014.07-netok.tar.bz2【2】uboot版本选择* 1. 芯片厂家提供哪个版本就直接用哪个版本2. 不选最新  --》 不稳定,资料较少3. 不选太旧  --》 不支持硬件平台4. 不选择测试版,选择稳定版后缀有rc为测试版
【3】移植的准备工作根据处理器获取硬件相关的信息。cpu:Cortex-A53 arch:ARMSOC:S5P6818 vendor:samsungboard:S5P6818 ---》fs6818开发板
【4】移植uboot源码
1. 准备uboot源码    1》 拷贝uboot源码到ubuntu中。2》 解压缩uboot源码tar -vxf u-boot-2014.07-netok.tar.bz23》 进入uboot源码目录 cd u-boot-2014.07不要将源码放到共享文件夹中,源码不要在windows下边去解压缩。windows不支持软连接文件。
2. 分析uboot源码的目录结构 平台相关:跟硬件相关的代码arch :架构相关代码board:板子相关代码    samsung公司将arch和borad目录下很多跟自己硬件无关的代码全部删除uboot源码的配置编译和管理使用Makefile工具。
3. 配置和编译uboot源码:1》 make help  : 查看make的帮助信息清除目标:clean      mrproper   distclean     编译uboot源码:all      Execute "make" or "make all" to build all targets marked with [*] For further info see the ./README file更多的详细的信息查看README。2》读README 254 For all supported boards there are ready-to-use default255 configurations available; just type "make <board_name>_config".256 257 Example: For a TQM823L module type:258 259     cd u-boot260     make TQM823L_configmake <board_name>_config  作用?由于uboot源码支持多种架构和开发板,应该配置uboot支持当前自己使用的开发板,目的是编译uboot源码时,只编译跟自己硬件平台相关的代码。3》uboot源码详细的配置编译过程1> 修改Makefile配置交叉编译工具链打开uboot源码顶层目录的Makefile,修改以下内容:198 ifeq ($(HOSTARCH),$(ARCH))199 CROSS_COMPILE ?=                200 endif修改为:198 ifeq (arm,arm)199 CROSS_COMPILE ?= arm-none-linux-gnueabi-200 endif2> 清除中断文件make distclean 切记:make distclean只在第一次编译是执行一次。3> 配置uboot源码支持fs6818开发板make fs6818_config打印以下信息表示配置成功:Configuring for fs6818 board...4> 编译uboot源码,生成uboot的镜像(可执行文件)make/make all打印以下信息表示编译成功,生成ubootpak.binLD      u-bootOBJCOPY u-boot.srecOBJCOPY u-boot.bin./tools/mk6818 ubootpak.bin nsih.txt 2ndboot u-boot.binNSIH : 188 line processed.NSIH : 512 bytes generated.Generate destination file: ubootpak.bin
分析make fs6818_config命令的执行过程详解需要具备能力:看到Makefile shell脚本
1. 打开uboot源码顶层目录的Makefile文件,搜索fs6818_config,搜索发现没有fs6818_config目标。%:模式匹配符搜索_config,找到以下信息:467 %_config:: outputmakefile                                     468     @$(MKCONFIG) -A $(@:_config=)469     @cp net/x6818-eth.mk net/eth.o去掉@$(MKCONFIG) -A $(@:_config=)前边的@符号,将命令回显到终端。/home/hqyj/20021/porting/u-boot-2014.07/mkconfig -A fs6818$(@:_config=):截取fs6818_config中的fs6818字符串2. 使用file命令查看mkconfig文件的属性file mkconfig  : shell脚本文件3. 打开uboot源码顶层目录的mkconfig脚本文件       24 if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then25     # Automatic mode26     line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' $srctree/boards.cfg`27     if [ -z "$line" ] ; then28         echo "make: *** No rule to make target \`$2_config'.  Stop." >&229         exit 130     fi31 32     set ${line}33     # add default board name if needed34     [ $# = 3 ] && set ${line} ${1}35 fi             解析:$# : 参数的个数$1 : 第一个参数$2 : 第二个参数-eq :相等-a :并且 $0 !~ /^#/ : 不是以#开头  $7 ~ /^'"$2"'$/ :$7和$2相等打开uboot源码顶层目录的boards.cfg line=Active arm slsiap s5p6818 s5p6818 fs6818 fs6818 -  set ${line} :重新设置脚本文件传递的参数之前:mkconfig -A fs6818 $1    $2执行set ${line}之后:mkconfig Active arm slsiap s5p6818 s5p6818 fs6818 fs6818 - $1   $2  $3       $4      $5      $6    $7   $8
51 CONFIG_NAME="${7%_config}"52 53 [ "${BOARD_NAME}" ] || BOARD_NAME="${7%_config}"54 55 arch="$2"                                                  56 cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $1}'`57 spl_cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $2}'`解析: CONFIG_NAME=fs6818 arch=armcpu=slsiap63 [ "$6" != "-" ] && board="$6"64 [ "$5" != "-" ] && vendor="$5"                               65 [ "$4" != "-" ] && soc="$4"board=fa6818vendor=s5p6818SOC=S5P681896 if [ "$options" ] ; then97     echo "Configuring for ${BOARD_NAME} - Board: ${CONFIG_NAME}, Options: ${98 else  # 配置成功打印以下内容99     echo "Configuring for ${BOARD_NAME} board..."
100 fi# 创建架构头文件102 #103 # Create link to architecture specific headers104 #105 if [ -n "$KBUILD_SRC" ] ; then106     mkdir -p ${objtree}/include107     LNPREFIX=${srctree}/arch/${arch}/include/asm/108     cd ${objtree}/include109     mkdir -p asm110 else111     cd arch/${arch}/include112 fi113 114 rm -f asm/arch115 116 if [ "${soc}" ] ; then117     ln -s ${LNPREFIX}arch-${soc} asm/arch118 elif [ "${cpu}" ] ; then119     ln -s ${LNPREFIX}arch-${cpu} asm/arch120 fi121              122 if [ -z "$KBUILD_SRC" ] ; then123     cd ${srctree}/include124 fi# 创建Make工具需要使用的配置头文件126 #127 # Create include file for Make128 #129 ( echo "ARCH   = ${arch}"130     if [ ! -z "$spl_cpu" ] ; then131     echo 'ifeq ($(CONFIG_SPL_BUILD),y)'132     echo "CPU    = ${spl_cpu}"133     echo "else"134     echo "CPU    = ${cpu}"135     echo "endif"136     else137     echo "CPU    = ${cpu}"138     fi139     echo "BOARD  = ${board}"140 141     [ "${vendor}" ] && echo "VENDOR = ${vendor}"142     [ "${soc}"    ] && echo "SOC    = ${soc}"143     exit 0 ) > config.mk打开include目录下的config.mk文件,有以下信息:1 ARCH   = arm                                                               2 CPU    = slsiap3 BOARD  = fs68184 VENDOR = s5p68185 SOC    = s5p6818创建板子指定的头文件152 #153 # Create board specific header file154 #155 if [ "$APPEND" = "yes" ]    # Append to existing config file156 then157     echo >> config.h158 else159     > config.h      # Create new config file160 fi161 echo "/* Automatically generated - do not edit */" >>config.h162 163 for i in ${TARGETS} ; do164     i="`echo ${i} | sed '/=/ {s/=/  /;q; } ; { s/$/ 1/; }'`"165     echo "#define CONFIG_${i}" >>config.h ;166 done  168 echo "#define CONFIG_SYS_ARCH  \"${arch}\""  >> config.h169 echo "#define CONFIG_SYS_CPU   \"${cpu}\""   >> config.h170 echo "#define CONFIG_SYS_BOARD \"${board}\"" >> config.h                                     171 172 [ "${vendor}" ] && echo "#define CONFIG_SYS_VENDOR \"${vendor}\"" >> config.h173 174 [ "${soc}"    ] && echo "#define CONFIG_SYS_SOC    \"${soc}\""    >> config.h175 176 [ "${board}"  ] && echo "#define CONFIG_BOARDDIR board/$BOARDDIR" >> config.h177 cat << EOF >> config.h178 #include <config_cmd_defaults.h>179 #include <config_defaults.h>180 #include <configs/${CONFIG_NAME}.h>181 #include <asm/config.h>182 #include <config_fallbacks.h>183 #include <config_uncmd_spl.h>184 EOF185 打开include目录下的config.h文件,有以下信息:1 /* Automatically generated - do not edit */2 #define CONFIG_SYS_ARCH  "arm"3 #define CONFIG_SYS_CPU   "slsiap"4 #define CONFIG_SYS_BOARD "fs6818"5 #define CONFIG_SYS_VENDOR "s5p6818"6 #define CONFIG_SYS_SOC    "s5p6818"7 #define CONFIG_BOARDDIR board/s5p6818/fs68188 #include <config_cmd_defaults.h>9 #include <config_defaults.h>10 #include <configs/fs6818.h>11 #include <asm/config.h>12 #include <config_fallbacks.h>13 #include <config_uncmd_spl.h>
【8】开发板系统的部署uboot镜像:ubootpak.bin linux内核镜像:uImage根文件系统镜像:ramdisk.img 根文件系统:rootfsramdisk.img由rootfs打包压缩得到 1. 开发阶段系统部署方式 (驱动开发)uboot ---》EMMC/SD卡 uImage ---》使用tftp下载到内存中rootfs ---》使用nfs网络文件系统的方式进行挂载2. 产品阶段系统部署方式(项目完成) uboot ---》EMMC/SD卡 uImage ---》EMMC/SD卡 ramdisk.img  ---》EMMC/SD卡
【开发阶段系统部署方式】 内核镜像:系统移植\系统移植资料\镜像\uImage 1. 启动uboot进入uboot的交互界面2. 下载内核镜像uImage到内存中先将uImage镜像文件拷贝到tftpboot目录下,tftp 0x48000000 uImage3. 设置自启动参数bootargs, 重点掌握面试出现概率高。uboot环境变量中的bootargs变量是一个自启动参数,linux内核启动时,会uboot环境变量的分区读取bootargs变量的值。(只需要设置一次)ubuntu系统是32位:setenv bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/hqyj/nfs/rootfs rw console=/dev/ttySAC0,115200 init=/linuxrc ip=192.168.1.222saveenv ubuntu系统是16.04 64位:setenv bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/hqyj/nfs/rootfs v4,tcp rw console=/dev/ttySAC0,115200 init=/linuxrc ip=192.168.1.222ubuntu系统是18.04以上 64位:setenv bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/hqyj/nfs/rootfs v4,tcp rw console=/dev/ttySAC0,115200 init=/linuxrc ip=192.168.1.222ubuntu系统是18.04以上版本需要修改ubuntu中的配置文件:参考文档:https://www.jianshu.com/p/10e3245f15f3?tdsourcetag=s_pctim_aiomsgroot=/dev/nfs:根文件系统的类型是nfsnfsroot=192.168.1.250:/home/hqyj/nfs/rootfs:根文件系统的路径,改成自己的ubuntu IP地址和根文件系统的路径rw:对根文件系统具有可读可写的权限console=/dev/ttySAC0,115200:开发板使用的是串口0,波特率是115200 init=/linuxrc:内核启动之后执行的1号进程ip=192.168.1.222:开发板的IP地址bootargs:就是告诉内核从哪里挂载根文件系统的,4. 启动linux内核 bootm 0x48000000bootm:用于启动linux内核的命令5. 总结:根文件系统挂载不成功的原因1》检查nfs安装和配置是否正确2》重启nfs服务sudo service nfs-kernel-server restart3》检查bootargs参数设置是否正确  tftp下载镜像不成功的原因,翻阅前边的笔记。

uboot配置编译流程:

 uboot配置编译流程1》配置交叉编译工具链CROSS_COMPILE2》清除源码的中间文件make clean / distclean 3》配置源码支持自己的硬件平台make  <board_name>_configmake fs6818_config4》编译uboot源码make all 

通过ubuntu系统烧写ubootpak.bin到SD卡中

使用sdtool工具:工具在以下目录中:系统移植\系统移植资料\工具\sdtool1》拷贝sdtool工具到ubuntu中,并切换到sdtool目录下    ....cd sdtool 2》将SD卡插到PC上,并让ubuntu识别SD卡,要求:必须使用SD卡读卡器,不可以使用电脑自带的SD卡卡槽SD卡被ubuntu识别之前,先在windows下对SD卡进行格式化。ubuntu识别SD卡步骤:虚拟机-》可移动设备-》读卡器的名字-》连接读卡器或者电脑是USB3.0的接口:虚拟机-》设置-》USB控制器-》USB兼容性:--》USB3.03》进入到sdtool目录下s5p6818-sdmmc.sh:烧写ubootpak.bin到SD卡中的脚本文件ubootpak.bin:自己编译生成的u-boot的镜像 使用我们自己制作的ubootpak.bin文件替换sdtool目录下的ubootpak.bin文件。4》烧写ubootpak.bin文件到SD卡中 在ubuntu的终端中执行以下命令 sudo ./s5p6818-sdmmc.sh /dev/sdb ubootpak.bin /dev/sdb : SD卡在dev目录下的设备文件执行以上命令出现以下内容,表示制作成功:669+1 records in670+0 records out343040 bytes (343 kB) copied, 0.00605781 s, 56.6 MB/s^_^ The image is fused successfully5》测试SD卡是否成功烧写uboot的镜像1. 开发板断电,2. 将SD卡插到开发板的SD卡槽上3. 设置开发板的启动方式为SD卡启动:查看拨码开关上边的表格拨码开关 1   OFF2   OFF 3   OFF4. 开发板上电注意: 1. 格式化SD卡,格式化为Fat32格式 在ubuntu中格式化使用fdisk命令。2. SD卡上的开关拨到lock位置,如果拨到Lock的对立面,SD卡会写保护。s5p6818-sdmmc.sh脚本文件分析:dd if="${xboot}" of="${dev}" bs=512 seek=1 conv=sync dd:数据烧写命令xboot=ubootpak.bin dev=/dev/sdbif:输入文件 (input file)of:输出文件 (output file)bs:大写是512字节seek:偏移seek*bs大小空间conv=sync:同步

通过windows系统烧写xin_ubootpak.bin到SD卡中


通过windows系统烧写xin_ubootpak.bin到SD卡中使用windows下的工具:系统移植\系统移植资料\工具\ImageWriter.7z解压缩之后,双击打开工具:Win32DiskImager.exe1. 首先得到windows版本的ubootpak.bin 在ubuntu版本的ubootpak.bin文件前边添加512字节的占位,跳过SD的前边512字节的分区表。dd if=/dev/zero of=512B bs=512 count=1chmod 777 512B cat 512B ubootpak.bin > win_ubootpak.bin拷贝win_ubootpak.bin到windows文件夹中2. 将SD卡插到PC上,可以使用PC自带的SD卡卡槽打开Win32DiskImager.exe,选择SD卡的盘符,选择要写到SD卡中的win_ubootpak.bin文件,单击write,就可以写入到SD卡中。3. 测试SD卡是否制作成功。

烧写ubootpak.bin到EMMC(flash)中

烧写ubootpak.bin到EMMC(flash)中前提:SD卡启动盘必须制作好,前边已经完成。通过SD卡的方式启动uboot,并进入uboot的交互界面。思路:ubootpak.bin烧写到EMMC中的思路.png1. 通过SD卡的方式启动uboot,并进入uboot的交互界面。 2. 使用tftp命令将ubootpak.bin文件烧写到内存中先将ubootpak.bin拷贝到tftpboot目录下cp ubootpak.bin ~/tftpboot/tftp 0x41000000 ubootpak.bin 将ubootpak.bin烧写到内存的0x41000000地址中3. 将内存中的ubootpak.bin使用update_mmc命令烧写到EMMC中update_mmc <dev no> <type> <mem> <addr> <length>- type :  2ndboot | boot | raw | part<dev no>:设备号  EMMC设备号为:2<type>:类型 2ndboot <mem>:从内存的哪个地址开始进行数据搬移<addr>:搬移到EMMC的起始地址,以字节为单位<length>:搬移数据的长度,以字节为单位 具体长度要看ubootpak.bin大小pri打印环境变量有以下信息:flash=mmc,2:ubootpak:2nd:0x200,0x78000;flash=mmc,2:2ndboot:2nd:0x200,0x4000;update_mmc 2 2ndboot 0x41000000 0x200 0x780004. 测试是否烧写成功1. 开发板断电,2. 切换到EMMC的启动方式拨码开关 1   ON2   OFF 3   ON3. 开发板上电

uboot中mmc命令的使用

uboot中mmc命令的使用1》mmc info - display info of the current MMC device查看当前mmc设备的信息2》mmc read addr blk# cnt作用:从MMC中读数据到内存中addr:内存的起始地址 blk#:MMC块设备的编号,一块是512字节cnt:个数从MMC的起始块号为blk的位置读数据到内存的addr为起始地址处,读cnt块数据的大小3》mmc write addr blk# cnt作用:从内存中写数据到MMC中addr:内存的起始地址 blk#:MMC块设备的编号,一块是512字节cnt:个数从内存的addr为起始地址写数据到MMC的blk块号处,写数据的大小位cnt块。4》mmc erase blk# cnt作用:擦除MMC中的数据blk#:MMC块设备的编号,一块是512字节cnt:个数从MMC的blk处开始擦除数据,擦除数据的大小是cnt块。

产品阶段系统部署方式(项目完成)

【产品阶段系统部署方式(项目完成)】             uboot ---》EMMC/SD卡 uImage ---》EMMC/SD卡 ramdisk.img  ---》EMMC/SD卡    1. 将uboot镜像烧写到EMMC中(uboot烧写阶段已经完成)update_mmc 2. 将内核镜像uImage烧写到EMMC中系统移植\系统移植资料\镜像\uImage将uImage拷贝到ubuntu的tftpboot目录下tftp 0x41000000 uImage mmc write 0x41000000 0x800 0x40003. 将根文件系统镜像ramdisk.img烧写到EMMC中系统移植\系统移植资料\镜像\ramdisk.img将ramdisk.img拷贝到ubuntu的tftpboot目录下tftp 0x41000000 ramdisk.img mmc write 0x41000000 0x20800 0x208004. 设置uboot的启动参数bootcmd  bootargssetenv bootcmd mmc read 0x48000000 0x800 0x4000\;mmc read 0x49000000 0x20800 0x20800\;bootm 0x48000000 0x49000000setenv bootargs root=/dev/ram rw initrd=0x49000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200saveenv 解析:root=/dev/ram :从内存中挂载根文件系统rw :对根文件系统具有读写的权限initrd=0x49000040,0x1000000挂载根文件系统的起始地址和大小跳过根文件系统的64字节的头部信息。rootfstype=ext4 :根文件系统的类型init=/linuxrc console=ttySAC0,115200开发板的内存是1G大小,寻址空间是0x4000_0000 - 0x8000_0000
系统的部署开发阶段系统的部署u-boot镜像     : EMMC/SD/TFlinux内核镜像  : tftp服务下载到内存中根文件系统     : nfs服务从服务器端去挂载setenv bootargs root=/dev/nfs nfsroot=192.168.2.149:/home/topeet/nfs/rootfs rw console=/dev/ttySAC0,115200 init=/linuxrc ip=192.168.2.213setenv bootcmd tftp 48000000 uImage\;bootm 48000000产品阶段系统的部署u-boot镜像     : EMMC/SD/TFlinux内核镜像  : EMMC/SD/TF根文件系统     : EMMC/SD/TFsetenv bootcmd mmc read 0x48000000 0x800 0x4000\;mmc read 0x49000000 0x20800 0x20800\;bootm 0x48000000 0x49000000setenv bootargs root=/dev/ram rw initrd=0x49000040,0x1000000 rootfstype=ext4 init=/linuxrc console=ttySAC0,115200

uboot启动过程主要做了什么?

uboot启动过程主要做了什么?分析uboot启动过程中,代码的执行主要做什么。ubootpak.bin的程序的入口代码(第一行代码)1. 打开uboot源码顶层目录的u-boot.lds链接脚本文件8  .text :9  {10   *(.__image_copy_start)代码段的第一个文件11   arch/arm/cpu/slsiap/s5p6818/start.o (.text*)12   arch/arm/cpu/slsiap/s5p6818/vectors.o (.text*)13   *(.text*)14  }2. 打开arch/arm/cpu/slsiap/s5p6818/start.S构建异常向量表20     .globl  _stext21 _stext:22     b   reset23     ldr pc, _undefined_instruction24     ldr pc, _software_interrupt                                                              25     ldr pc, _prefetch_abort26     ldr pc, _data_abort27     ldr pc, _not_used28     ldr pc, _irq29     ldr pc, _fiq3. 通过b reset跳转到reset标签处78 reset:保存uboot的启动参数79     bl  save_boot_params80     /*81      * set the cpu to SVC32 mode82      */切换CPU进入SVC模式83     mrs r0, cpsr84     bic r0, r0, #0x1f                                                 85     orr r0, r0, #0xd386     msr cpsr,r087     禁止看门狗88     /* disable watchdog */89     ldr r0, =0xC001900090     mov r1, #091     str r1, [r0]禁止MMU和catch95     bl  cpu_init_cp15获取CPUID,初始锁相环,选择器,内存96     bl  cpu_init_crit 252 ENTRY(cpu_init_crit)259     b   lowlevel_init       @ go setup pll,mux,memory260 ENDPROC(cpu_init_crit)实现uboot的自搬移的过程,从flash中搬移到内存中100 relocate_to_text:101     /*102      * relocate u-boot code on memory to text base103      * for nexell arm core (add by jhkim)104      */105     adr r0, _stext              /* r0 <- current position of code   */106     ldr r1, TEXT_BASE           /* test if we run from flash or RAM */107     cmp r0, r1                  /* don't reloc during debug         */108     beq clear_bss109 110     ldr r2, _bss_start_ofs111     add r2, r0, r2              /* r2 <- source end address         */                                         112 113 copy_loop_text:114     ldmia   r0!, {r3-r10}       /* copy from source address [r0]    */115     stmia   r1!, {r3-r10}       /* copy to   target address [r1]    */116     cmp r0, r2                  /* until source end addreee [r2]    */117     ble copy_loop_text118 119     ldr r1, TEXT_BASE           /* restart at text base */120     mov pc, r1// 清除BSS段 122 clear_bss:123 #ifdef CONFIG_MMU_ENABLE124     bl  mmu_turn_on125 #endif126     ldr r0, _bss_start_ofs127     ldr r1, _bss_end_ofs128     ldr r4, TEXT_BASE           /* text addr */                               129     add r0, r0, r4130     add r1, r1, r4131     mov r2, #0x00000000         /* clear */132 133 clbss_l:str r2, [r0]            /* clear loop... */134     add r0, r0, #4135     cmp r0, r1136     bne clbss_l// 初始化C代码运行所需的栈空间138     ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)139     bic sp, sp, #7                  /* 8-byte alignment for ABI compliance */140     sub sp, #GD_SIZE                /* allocate one GD above SP */   141     bic sp, sp, #7                  /* 8-byte alignment for ABI compliance */142     mov r9, sp                      /* GD is above SP */143     mov r0, #0// 全局数据结构体类型变量的初始化144     bl  board_init_f// 板子硬件初始化函数160     ldr pc, =board_init_r               /* this is auto-relocated! */arch/arm/lib/board.c710     for (;;) {711         main_loop();  // 死循环712     }82     s = bootdelay_process();   获取倒计时的时间83     if (cli_process_fdt(&s))   倒计时减到0之前按下任意键,进入交互模式84         cli_secure_boot_cmd(s);  交互的程序85 86     autoboot_command(s);   自启动的程序

内核源码配置和编译的详细过程

内核源码配置和编译的详细过程 1> 配置交叉编译工具链,打开内核源码顶层目录的Makefile,将以下内容:195 ARCH        ?= 196 CROSS_COMPILE   ?= 修改为: 195 ARCH        ?= arm196 CROSS_COMPILE   ?= arm-none-linux-gnueabi-2> 清除中间文件 make clean / distclean 3> 配置内核源码支持fs6818硬件平台 make fs6818_defconfig4> 通过菜单选项的方式对内核进行配置make menuconfig 5> 编译内核生成uImage的内核镜像文件make -j2 uImage 或者make -j4 uImage 或者make uImage打印以下信息表示编译成功:Image Name:   Linux-3.4.39-farsightCreated:      Mon Jul 20 15:09:28 2020Image Type:   ARM Linux Kernel Image (uncompressed)Data Size:    5391608 Bytes = 5265.24 kB = 5.14 MBLoad Address: 40008000Entry Point:  40008000uImage内核镜像在一下目录中:Image arch/arm/boot/uImage is ready问题1:make menuconfig Your display is too small to run Menuconfig!It must be at least 19 lines by 80 columns.make[1]: *** [menuconfig] Error 1make: *** [menuconfig] Error 2原因:终端字体太大,缩小终端的字体问题2:make menuconfig第一次使用make menuconfig 需要安装图形化界面的工具配置之前需要安装图形图(make meuconfig):sudo apt-get install libncurses5-dev 问题3:make uImage在编译的过程中可能出现如下错误:"mkimage" command not found - U-Boot images will not be builtmake[1]: *** [arch/arm/boot/uImage] Error 1make: *** [uImage] Error 2错误的原因:找不到mkimage命令,根据提示分析出来mkimage应该存在uboot源码目录中uboot源码必须进行编译之后才会有mkimage可执行程序        解决问题的方法:将uboot源码的tools目录下的mkimage,拷贝到到ubuntu的/usr/bin目录下:sudo cp ~/uboot源码目录/tools/mkimage   /usr/binuboot目录                     ubuntu目录再次make uImage重新编译内核即可。测试生成的uImage内核镜像文件是否可以使用1》拷贝arch/arm/boot/目录下的uImage文件到tftpboot目录下2》设置开发板的系统启动方式开发阶段系统的部署和自启动的模式tftp 下载内核 nfs挂载根文件系统bootcmd bootargs3》系统启动成功,说明内核编译成功 

make fs6818_defconfig命令执行过程详解

make fs6818_defconfig命令执行过程详解1. 打开内核源码顶层目录的Makefile文件,搜索fs6818_defconfig,没有搜索到;搜索%config,搜索到一下信息491 %config: scripts_basic outputmakefile FORCE                                492     $(Q)mkdir -p include/linux include/config493     $(Q)$(MAKE) $(build)=scripts/kconfig $@$@ : 目标$^ :所有的依赖$< :第一个依赖解析:Q = @mkdir -p include/linux include/configmake -f scripts/Makefile.build obj=scripts/kconfig fs6818_defconfig进入scripts/kconfig目录下执行make fs6818_defconfig2. 打开scripts/kconfig目录下的Makefile文件搜索%_defconfig,得到以下信息95 %_defconfig: $(obj)/conf96     $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)解析:scripts/kconfig/conf --defconfig=arch/arm/configs/fs6818_defconfig Kconfig使用file命令查看scripts/kconfig目录下conf文件的类型file scripts/kconfig/conf可知conf文件是一个elf可执行文件通过以上分析可知,conf文件根据arch/arm/configs/目录下的fs6818_defconfig默认配置文件和内核源码顶层目录的Kconfig文件生成.config文件。

make menuconfig执行过程详解

make menuconfig执行过程详解
1.  搜索menuconfig,没有搜索到;搜索%config,搜索到一下信息491 %config: scripts_basic outputmakefile FORCE                                492     $(Q)mkdir -p include/linux include/config493     $(Q)$(MAKE) $(build)=scripts/kconfig $@解析:Q = @mkdir -p include/linux include/configmake -f scripts/Makefile.build obj=scripts/kconfig menuconfig进入scripts/kconfig目录下执行make menuconfig
2. 打开scripts/kconfig目录下的Makefile文件搜索menuconfig,得到以下信息20 menuconfig: $(obj)/mconf                                                    21     $< $(Kconfig)解析:scripts/kconfig/mconf Kconfig使用file命令查看scripts/kconfig目录下mconf文件的类型file scripts/kconfig/mconf可知mconf文件是一个elf可执行文件mconf根据内核源码顶层目录的Kconfig文件生成图形化界面的菜单选项配置界面。3. 打开内核源码顶层目录的Kconfig文件5 mainmenu "Linux/$ARCH $KERNELVERSION Kernel Configuration"6 7 config SRCARCH8     string9     option env="SRCARCH"10 11 source "arch/$SRCARCH/Kconfig" 解析: mainmenu : 主菜单语法格式:mainmenu  "主菜单名字"source:包含下一级子菜单对应的Kconfig文件路径语法格式: source "下一级子菜单的Kconfig路径"打开arch/arm/目录下的Kconfig文件。Kconfig文件作用?Kconfig用于存放菜单选项的配置信息。1. 主菜单 包含:子菜单,菜单选项2. 子菜单:包含:子菜单,菜单选项3. 菜单选项

s5p6818/fs4418系统移植之uboot的移植相关推荐

  1. STM32MP157 Linux系统移植开发篇4: BootLoader(Uboot)移植

    本文章为<STM32MP157 Linux系统移植开发篇>系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板).stm32mp157是ARM双核,2 ...

  2. 创客exynos-fs4412系统移植-(uboot,内核,文件系统)

    fs4412系统移植学习笔记 环境: ubuntu 14.04 发行版 FS4412 实验平台 交叉编译工具:arm-none-linux-gnueabi- gcc: 4.8.5 目录 fs4412系 ...

  3. 全志h3linux移植教程,全志H3启动分析,移植主线UBOOT

    全志H3启动分析,移植主线UBOOT 参考资源 启动流程 因为使用的是外扩SD卡,因此主要参考了这部分内容:Bootable SD card SD卡Layout如下: start sector siz ...

  4. uboot环境下mmc操作_【记录】将Uboot 2011.06中mmc驱动移植到uboot 1.1.6的过程

    [记录]将Uboot 2011.06中mmc驱动移植到uboot 1.1.6的过程 时间:2011-8-14 作者:crifan 联系方式:green-waste (at) 163.com 附上代码: ...

  5. u-boot移植第三弹——移植2013.10u-boot到RealARM210 cortex-A8开发板(支持moviNAND_Fusing_Tool_v2.0)

    在移植2012.10过程中遇到个麻烦的问题,到写这篇文章的时候还是没找原因在哪,导致无法正常运行.我遇到的问题如下:__bss_start和__bss_end__这两个地址无法正确得到地址,也就是bs ...

  6. Linux学习笔记---移植官方uboot步骤(二)

    在上一篇 Linux学习笔记---移植官方uboot步骤(一) 自己的uboot已经编译成功了,接下来继续移植LCD驱动和网络驱动. 修改LCD驱动 修改配置参数 打开my_uboot/board/f ...

  7. Linux学习笔记---移植官方uboot步骤(一)

    目录 编写shell脚本 修改MakeFile文件 重命名shell脚本 添加默认配置文件 修改默认配置文件 准备需要的板级文件夹 重命名.C文件 修改Makefile 修改imximage.cfg配 ...

  8. 图像识别DM8127开发攻略——UBOOT的移植说明

    图像识别DM8127开发攻略--UBOOT的移植说明 根据前几篇文章的介绍,想必大家对DM8127软件架构有了全局的认识,下面我们从开发的角度进行裁剪移植最基本的BOOT软件包,嵌入式开发人员拿到一个 ...

  9. 嵌入式uboot移植之三星官方uboot开始移植

    注:以下内容来自朱老师物联网课件 1. 移植前的准备工作 1.1 获取三星移植过的uboot源代码 我们使用的是老师提供的android_uboot_smdkv210.tar.bz2,文件存储在课件2 ...

  10. uboot的移植——移植uboot官方的uboot到x210开发板

    以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除. 参考内容 uboot--官网下载直接移植(一) - biaohc - 博客园 uboot--官网下载直接移植(二) - biaohc - ...

最新文章

  1. Google工作10年,关于技术、管理和职场生涯的一些感悟
  2. 维护人员的VMware日常工作
  3. 抗锯齿_最好的抗锯齿,画质保留提升帧数
  4. lua把userdata写入mysql_Lua教程(十九):userdata
  5. Windows Server 2008 R2卸载干净ORACLE 11G
  6. c#中已知一个外部窗口的句柄,怎么关闭
  7. db2有MySQL那样的时间戳_MySQL 按照日期格式查询带有时间戳数据
  8. 多项式牛顿迭代(应用:求逆,开根,对数exp)
  9. 点击网页跟踪php代码的工具,使用ltrace工具跟踪PHP库函数调用的方法
  10. html checked属性值,HTML复选框的checked属性的值是多少?
  11. Windows Eclipse Maven 安装
  12. linux如何让普通用户有root权限
  13. win10无线投屏_Win10电脑屏幕分割成四分屏投屏测试
  14. oracle plsql 字符串长度,PLSQL SQL
  15. mysql2008安装失败_sql server 2008为什么会安装失败 sql2008安装失败解决办法
  16. 仿微信、qq聊天,@好友功能
  17. 微信接口返回码对照表
  18. Safari 手机浏览器无法下载的问题
  19. php日志写什么内容,Monolog-PHP日志类库介绍
  20. perforce(P4)常用命令(命令行)

热门文章

  1. kappa一致性检验教程_Kappa一致性分析
  2. 我眼中的光明·第六周·蓝天·一
  3. 【集合】CFdiv.2#600B Silly Mistake
  4. cucumber rest assured做接口测试
  5. 已经有些跑偏的“学术会议文化”!
  6. iphone4电信版怎么写号_电信iphone4如何剪卡以及写号
  7. 计算机故障诊断知识,故障诊断
  8. 详细跨境电商模式分析
  9. 写给海布里之王—亨利
  10. HTML5 学习总结(一)——HTML5概要与新增标签