用uboot烧写内核到smart210

2024-06-23 05:58
文章标签 uboot 内核 烧写 smart210

本文主要是介绍用uboot烧写内核到smart210,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1,写uboot到sd卡,因为smart210可以从sd卡启动,所以在ubuntu系统下把uboot烧到sd卡中

在ubuntu终端下输入命令:dd iflag=dsync oflag=dsync if=smart210-uboot.bin of=/dev/sdc seek=1

/dev/sdc为SD卡设备名,写完后

2.启动UBOOT:从sd卡启动开发板,进入uboot

U-Boot 2011.06 (Dec 26 2013 - 12:15:22) for Smart210CPU:    S5PC110@1000MHzBoard:   Smart210
DRAM:  512 MiB
WARNING: Caches not enabledPWM Moudle Initialized.
NAND:  512 MiB
MMC:   SAMSUNG SD/MMC: 0, SAMSUNG SD/MMC: 1
In:    serial
Out:   serial
Err:   serial
Net:   dm9000Hit any key to stop autoboot:  0 
[Smart210]#

查看环境变量参数

[Smart210]# printenv
baudrate=115200
bootargs=noinitrd root=/dev/mtdblock4 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc
bootcmd=nand read 20000000 600000 500000 ; bootm 20000000
ethact=dm9000
ethaddr=00:40:5c:26:0a:5b
fileaddr=20000000
filesize=3EAB0
gaewayip=192.168.18.7
gatewayip=192.168.18.7
ipaddr=192.168.1.5
netmask=255.255.255.0
serverip=192.168.1.2
stderr=serial
stdin=serial
stdout=serial
3.烧写uboot到nand flash

首先确保tftp服务可用,,在ubuntu系统下安装tftp服务器,成功安装后,设置开发板uboot 环境变量ip,,我这里,ubuntu的ip号为192.168.1.3

所以我要设置uboot的serverip 为192.168.1.3

setenv serverip 192.168.1.3

网络设置完成后就可以开始用tftp下载文件了,,这时还要确保ubuntu系统下tftp服务的目录下有我们所需要的uboot.内核,文件系统等

[Smart210]# setenv serverip 192.168.1.3
[Smart210]# tftp 20000000 uboot.bin    
dm9000 i/o: 0x88001000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 00:40:5c:26:0a:5b
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.3; our IP address is 192.168.1.5
Filename 'uboot.bin'.
Load address: 0x20000000
Loading: T ###################################################
done
Bytes transferred = 256688 (3eab0 hex)
这里把tftp服务端的uboot.bin下载到了开发板ram地址为20000000处

然后准备从20000000地址的RAM处写到nand flash中,先擦除nand flash

nand  erase  0  50000

第一个参数0为地址,50000为大小
擦除完后写入

[Smart210]# nand erase 0 50000NAND erase: device 0 offset 0x0, size 0x50000
offset = 800, writesize = 0 
Erasing at 0x40000 -- 100% complete.
OK
[Smart210]# nand write 20000000 0 50000NAND write: device 0 offset 0x0, size 0x50000
Writing at 0x40000 -- 100% is complete. 327680 bytes written: OK
4.烧写内核到nand flash

烧写内核时不能随便烧,得看内核中nand flash的分区地址

我的内核分区为,一般友善的210板子好像都这么分的


0x0000000c0000-0x000000100000 : "misc"
0x000000100000-0x000000600000 : "recovery"
0x000000600000-0x000000b00000 : "kernel"
0x000000b00000-0x000000e00000 : "ramdisk"
0x000000e00000-0x000020000000 : "system"
 

看到内核的地址范围为0x000000600000-0x000000b00000 : "kernel"

然后tftp下载内核uImage到ram20000000,擦除nand flash 放内核的区域,写入nand flash

[Smart210]# tftp 20000000 uImage
[Smart210]# nand erase 600000 500000 
Smart210]# nand write 20000000 600000 500000NAND write: device 0 offset 0x600000, size 0x500000
Writing at 0xae0000 -- 100% is complete. 5242880 bytes written: OK

5.烧写文件系统到nand flash

文件系统地址区域为0x000000e00000-0x000020000000 : "system"

tftp 20000000 rootfs.img

下载成功后看到    

################################
done
Bytes transferred = 333436224 (13dfd540 hex)
转化成16进制大小为0x13dfd540
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,</span>

先擦除nand flash 放文件系统的区

[Smart210]# nand erase e00000 1f200000
NAND erase: device 0 offset 0xe00000, size 0x1f200000
offset = 800, writesize = e00000 
Erasing at 0x1ffe0000 -- 100% complete.
OK
写文件系统到nand flash

 nand write.yaffs 20000000 e00000 13dfd540

最后一个参数为文件系统的实际大小,因为yaffs文件系统的存储有特殊格式,所以最后这个地址不能随便乱设,所以设为了文件系统的实际大小

,烧写过程时间比较长

[Smart210]# nand write.yaffs 20000000 e00000 13dfd540NAND write: device 0 offset 0xe00000, size 0x13dfd540
Writing at 0x14240000 -- 100% is complete. 323332096 bytes written: OK
6.启动系统

查看uboot环境变量中的bootcmd

bootcmd=nand read 20000000 600000 500000 ; bootm 20000000
这个参数的意思是,系统启动时从600000地址处读取500000大小的文件到RAM20000000地址处,然后启动

,,,保存环境变量到nand flash

[Smart210]# save
Saving Environment to NAND...
Erasing Nand...
offset = 800, writesize = 100000 
Erasing at 0x100000 -- 100% complete.
Writing to Nand... done
关机,重启开发板,




这篇关于用uboot烧写内核到smart210的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086320

相关文章

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

Ubuntu22.04回退系统内核

文章目录 起因回退操作卸载内核禁止内核升级 起因 最近因为系统内核自动升级,导致显卡驱动检测不到,炼丹环境被破坏。无奈只能重装驱动,于是跟着手册操作发现驱动要求的是内核版本是5.15.0-25-generic,而我通过uname -r发现这时候的内核版本是6.8.0-40-generic,看来只能回退了。 我搜索了网上很多的文章,没有一篇文章能够完全解决这个问题,所以在我多次尝

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

linux 内核提权总结(demo+exp分析) -- 任意读写(四)

hijack_modprobe_path篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     原理同hijack_prctl, 当用户执行错误格式的elf文件时内核调用call_usermod

linux 内核提权总结(demo+exp分析) -- 任意读写(三)

hijack_prctl篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   prctl函数: 用户态函数,可用于定制进程参数,非常适合和内核进行交互 用户态执行prctl函数后触发prctl系统

linux 内核提权总结(demo+exp分析) -- 任意读写(二)

hijack_vdso篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     vdso: 内核实现的一个动态库,存在于内核,然后映射到用户态空间,可由用户态直接调用 内核中的vdso如果被修改

linux 内核提权总结(demo+exp分析) -- 任意读写(一)

cred篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   每个线程在内核中都对应一个线程结构块thread_infothread_info中存在task_struct类型结构体 struct t