1,重定位--把bootloader本身的代码从flash复制到它的链接地址去
想要调用C代码,必须要设置栈(SDRAM的范围,64M的SDRAM的地址空间是30000000-34000000)
ldr sp, = 0x34000000
2,链接脚本的地址是33f80000
刚好跟最高的地址相差512K
$代码段、只读数据段、数据段、BSS段
关于BSS段,我的理解是,给予的是起始地址和终止地址,并不是拷贝多少0过去。而是在内存中采用Clear BSS段的模式进行。
3,拷贝的内核的地址 30008000 大多数的2440开发板都是确定的。
NANDFLASH中的开始的地址是看MTD的分区表
第二节:
1,人为的把BOOTLOADER的启动分为了第一阶段和第二阶段。
第一阶段主要是位置无关码,而且还没有到SDRAM里面去执行
第二阶段是在SDRAM里面执行,而且主要是C语言代码。
传入内核的参数TAG,约定一个地址和内容,内核就知道参数了。
2022-7-2
目标:想要使用FTP加载内核,然后用NFS加载文件系统
一,NFS的使用
1,在开发初期,开发者可能需要经常更改或更换 rootfs,把 rootfs 用 NFS 的方式挂载, 这样可以大幅减少开发的时程。
说明:bootargs
a、root=/dev/nfs
/dev/nfs并非真的设备,而是一个告诉内核要通过网络取得根文件系统。
d、init=/linuxrc
指定初始化文件
二,看下如果用ftp启动内核和NFS启动文件系统的bootcmd和bootargs的配置
#setenv bootcmd tftp 0x31000000 uImage \; bootm 0x31000000
#saveenv
bootm从内存地址启动
#setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.0.119:/home/guqinglei/Writing_code/TQ2440/rootfs,proto=tcp,nfsvers=3 ip=192.168.0.110:192.168.0.119:192.168.0.1:255.255.255.0::eth0:off
#saveenv
以上基本可以理解了。
二,看下TQ2440的默认的bootcmd和bootargs配置是多少
1,uboot源码查看Default_environment
#define CONFIG_BOOTARGS "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"
#define CONFIG_BOOTCOMMAND "boot_zImage"
boot_zImage 我想最终的指令肯定不是这样的,而是类似于
#nand write 0x31000000 400000 500000(内核下载在0x31000000后)
#setenv bootcmd nand read 0x31000000 400000 500000 \; bootm 0x31000000
#saveenv
如上是从nand读取内核到内存,然后启动的指令。
从头捋一遍,uboot,内核,文件系统等啥的。
1,文件系统是这样创建 的
#cd/opt/EmbedSky
#mkyaffsimage_2 root_2.6.30.4 root_2.6.30.4.bin
最终也是.bin文件