路由器uboot编译
⑴ 你好,请教一个问题:openwrt 能够编译自己写的C/C++程序吗
openwrt就好比redhot,ubuntu,fedora等都是linux。所以肯定支持gcc。
如果你要编译编译你自己定义的C/C++程序到你的无线路由器上,如果你的路由器具有烧写的条件,当然是可以往里面烧写的。
首先声明:这是一个很复杂的过程,如果只是偶尔的玩玩,我建议你不要看下边的了。
1. 首先装一个linux虚拟机(redhot,ubuntu,fedora都可以);
2. 然后下载openwrt的bsp源码,根据你的路由器选择合适和架构和板子型号,然后编译生成开发环境;
3. 再然后上openwrt官网上学习如何在bsp中创建一个自己的程序包,从尔编译你自己的c/c++程序。
4. 然后编译生成linux镜像和文件系统,然后再到你的路由器上使用uboot在对应的位置上烧写你生成的文件系统。
5. 然后重启就能运行你写的c/c++程序了。
(当然也可以在编译好了之后通过NFS服务进行运行你的程序。)
最后温馨提示:刷机须谨慎,小心变砖头。
⑵ 为什么在ubuntu编译下uboot时总是出错
1.U-boot的使用:
ubuntu下基本只能用
kermit协议,进行串口通信了:
loadb
Ctrl+\,再按c,切换到C-kermit的命令行模式:
send
<文件路径>,回车。
传送完毕后,输入c,回到U-boot串口界面。
若能和PC机ping成功,则可用tftp和nfs传输文件:
dhcp:使用
DHCP/TFTP 协议获取文件
rarpboot :使用 RARP/TFTP 协议获取文件
nfs:使用 NFS
协议获取文件
tftpboot :使用 TFTP 协议获取文件
bootp:使用 BOOTP/TFTP
协议获取文件
以上命令的格式都为:指令 [目的 SDRAM 地址] [[主机 IP:]文件名]
注意:
要使用 dhcp、rarpboot 或 bootp 要路由器或 Host
支持的这些协议和服务。
如果没有输入[目的SDRAM 地址],系统就是用编译时定义的CONFIG_SYS_LOAD_ADDR
在使用如果
tftpboot 和 nfs 命令没有定义[主机 IP:],则使用 ENV 中的 serverip
其它命令必需定义[主机 IP:],否则使用提供动态 IP 服务的主机
IP。
Nand Flash
操作指令:
nand info
nand device [dev]
nand read addr off size
nand
write addr off size
nand write[.yaffs[1]] addr off size
nand erase [clean]
[off size]
nand bad
nand mp[.oob] off
nand scrub
nand markbad
off
nboot loadAddr dev offset
内存/寄存器操作指令:
nm [.b, .w, .l]
address
mm [.b, .w, .l] address
md [.b, .w, .l] address [# of
objects]
mw [.b, .w, .l] address value [count]
cp [.b, .w, .l] source
target count
Nor Flash 指令:
flinfo
(N)
md
protect
cp
USB 操作指令:
usb reset
usb
stop [f]
usb tree
usb info [dev]
usb storage
usb dev [dev]
usb
part [dev]
usb read addr blk# cnt
SD 卡(MMC)指令:
mmc init
mmc
device
FAT 文件系统指令:
fatinfo <interface>
<dev[:part]>
fatload <interface> <dev[:part]> <addr>
<filename> [bytes]
fatls <interface> <dev[:part]>
[directory]
系统引导指令:
boot 和 bootd 都是运行
ENV”bootcmd”中指定的指令
bootm [addr [arg ...]]
run 运行一个 ENV
定义的命令脚本
reset 重启 CPU
使用 U-boot
将映像文件烧写到板上的 Flash,一般步骤是:
(1)通过网络、串口、U盘、SD卡等方式将文件传输到SDRAM;
(2)使用 Nand
Flash 或 Nor Flash 相关的读写命令将 SDRAM 中的数据烧入 Flash。
内核的引导步骤如下:
(1)用
U-boot 的 mkimage 工具处理内核映像 zImage。
(2)通过网络、串口、U 盘、SD 卡等方式将处理过的内核映像传输到 SDRAM
的一定
位置(一般使用 0x30008000)
(3)然后使用”bootm"等内核引导命令来启动内核。
2.U-boot在mini2440上的移植
在U-boot根目录下:
vim Makefile
将 CROSS_COMPILE = arm-tekkaman-linux-gnueabi-
修改为CROSS_COMPILE = arm-linux-
make mini2440_config
make
注意:修改交叉编译器一定要在make之前完成!
终于完成了U-boot
的移植。以前一直掐住瓶颈的问题,居然出在这里!
至此,总算完成了U-boot+内核+rootfs根文件系统等的移植,一个嵌入式系统搭建起来了。然而在这里,基本上只是拿了人家现成的代码稍加修改而已,不值得沾沾自喜。接下来该在应用程序上进行开发了。
⑶ 如何从uboot中推算路由器flash烧写地址
首先从uboot中得到flash分区的基地址
一、找到uboot编译生成的bootstrap.map或者u-boot.map文件,找到下面这句,
.text 0x000000009f000000 0x3520
其中 0x9f000000 就是flash分区的基地址;
二、查看uboot的源代码,例如qca9531芯片,其flash分区的基地址就定义在下面这个头文件中;
u-boot\include\configs\board953x.h
/* NOR Flash start address */
#define CFG_FLASH_BASE 0x9f000000
查看路由器flash分区信息
~ # cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00630000 00010000 "rootfs"
mtd3: 00160000 00010000 "uImage"
mtd4: 00010000 00010000 "mib0"
mtd5: 00010000 00010000 "ART"
~ # cat /proc/partitions
major minor #blocks name
31 0 256 mtdblock0
31 1 64 mtdblock1
31 2 6336 mtdblock2
31 3 1408 mtdblock3
31 4 64 mtdblock4
31 5 64 mtdblock5
开始计算各自模块的flash地址及烧写命令
烧写uboot:
tftp 0x80060000 u-boot.bin
erase 0x9f000000 +0x40000
cp.b 0x80060000 0x9f000000 0x40000
烧写jffs2
tftp 0x80060000 ap143-jffs2
erase 0x9f050000 +0x630000
cp.b 0x80060000 0x9f050000 0x630000
烧写vmlinux
tftp 0x80060000 vmlinux.lzma.uImage
erase 0x9f680000 +0x160000
cp.b 0x80060000 0x9f680000 0x160000
烧写art:
tftp 0x80060000 art.bin
erase 0x9f7f0000 +0x10000
cp.b 0x80060000 0x9f7f0000 0x10000
⑷ openwrt sdk下编译uboot(添加usb端口功能)
在ehci-ra.c的ehci_hcd_init中加入MT7620_ASIC_BOARD定义:
MT7620#usbreset
(Re)startUSB...
USB:inusb_lowlevel_init
Mediatek/_length16
Register1111NbrPorts1
USBEHCI1.00
scanningbusfordevices...2USBDevice(s)found
scanningbusforstoragedevices...1StorageDevice(s)found
MT7620#usbinfo
1:Hub,USBRevision0.2
-u-bootEHCIHostController
-Class:Hub
-PacketSize:64Configurations:1
-Vendor:0x0000Proct0x0000Version0.1
Configuration:1
-Interfaces:1SelfPowered0mA
Interface:0
-AlternateSettings0,Endpoints:1
-ClassHub
-
2:MassStorage,USBRevision2.0
-HPUSB2.0Flash00CCCBB99999
-Class:(fromInterface)MassStorage
-PacketSize:64Configurations:1
-Vendor:0x0204Proct0x6025Version1.0
Configuration:1
-Interfaces:1BusPowered100mA
Interface:0
-AlternateSettings0,Endpoints:2
-ClassMassStorage,Transp.SCSI,Bulkonly
-Endpoint1OutBulkMaxPacket512
-Endpoint1InBulkMaxPacket512
⑸ 解锁uboot分区路由器固件怎么编译
参考如下:
1、首先到路由器的官网下载最新固件。
2、登陆路由器,选择系统工具-软件升级。
3、点击浏览,找到下载的路由器固件。
4、等待升级完成,路由器会自动重启就完成升级了。
希望能帮到您。
⑹ ARM (UBOOT)编译出错问题
我以前用的是fedora12,我以为是系统问题(因为以前我也做过uboot编译,没有-rd
asm-arm/arch即可
意思就是强行删除
不行联系我635123374
嵌入式
⑺ 编译uboot出错,怎么解决,求助
这个是没有指定架构和交叉编译器造成的错误,解决的办法有两种: 以smdk2410为例: 第一种:先执行$ make smdk2410_config 然后执行 $ make ARCH=arm CROSS_COMPILE=arm-linux- 就不会出现上面的错误了。 第二种: 修改顶层目录下的Makefile文件...
⑻ 怎样用winhex从路由器编程器固件中提取art和uboot
ART在OP固件的最后面,从0F0000到0FFFFF这64K数据就是ART,但是并不是所有的固件都是在最后面,无赖之下,仔细对比起其中的字节,发现FW150R之类的固件是在最后面,跟OP一样,跟换了ART再刷,效果比坛子里下的那个效果要好,可以稳定选择20DB
可是效果还是很差,因为功放没启动,反而成了信号阻碍的了,手机放在AP上,可以达到-40DB,但是一拿开就不行了,装天线根本没用,试了千万种ART,一个个比对,修改了刷,刷了焊,焊了再拆。拆了再刷,那个艰辛啊,幸亏有热风枪,焊接并不是很费神
最后突然想到,原产自带的既然能启动,那么他的AR应该可以用吧,打开备份的原厂固件,按照OP的方法,却不是的,现在终于知道,原来ART真的不是都在最后面,这个固件的最后面既然是UBOOT
过后查看OP及其他AR9331的ART发现,其中都有一段字符,好像是HB6什么的,找到原厂固件搜索这段字符,嘿,还真有,仔细研究起始断和结束段,保存下来正好64K,反正拆习惯了,也刷习惯了,说实话,这编程真的好慢,刷好后,上机测试,哈,终于成功了,可稳定选择27DB,而且效果明显,站在5米处,选择27DB和20DB明显相差7个DB,奉上ART及编译好的固件。
⑼ 编译uboot时出现如下错误,求大神告知!!!
没有指定交叉编译器,定义Makefile中CROSS_COMPILE
⑽ 无线路由器怎样刷uboot
"具体操作步骤如下:
1.用到的东西
网线 一条
USB转TTL线 一条
SecureCRT终端仿真程序
2.接驳TTL线
路由器PCB板上的TX、RX、GND分别连接到USBTTL(USB转串口)的TX、RX、GND插针上
拔掉路由器WAN和LAN口所有网线
3.电脑预设(笔者用的是XP系统)
将USB转TTL接到电脑上,装好USBTTL驱动,选择正确的COM口
4.把电脑的网卡地址改成静态IP地址(笔者设置为192.168.1.100)
5.设置SecureCRT COM口的速率为每秒位数57600(笔者这里用的是SecureCRT,)。
设置SecureCRT里(Protocol:Serrial Port:COM9 Baud rate:57600 Data bits:8 Parity:None Stop bits:1)
Flow control选项 DTR/DSR,RTS/CTS,XON/XOFF都不打勾(COM口根据设备管理器中选择相应的数字)。
6.点“Connect”完成SecureCRT COM口连接设置,如果连接正确,窗口前会有一个绿色的勾
7.可以打开路由的电源,如SecureCRT有显示就表示接驳正确,关上电源。如没有,把RX和TX两根线对调。
把相关的文件(u-boot、eeprom及Openwrt固件),与TFTPD32放在同一文件夹内,运行TFTPD32(什么都不要设置)。
8. 开始刷机——刷入u-boot(确保TTL线已经正确接好)
(一)在SecureCRT,打开HG255D电源, 当出现
Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Enter boot command line interface.
9: Load Boot Loader code then write to Flash via TFTP.
(二)马上按4后出现如下(不能按9,按9更新U-boot 100%变砖头——键盘上的数字键4)
4: System Enter Boot Command Line Interface.
U-Boot 1.1.3 (Nov 28 2012 - 12:00:15
Main_loop !!
9.(三)设置tftp服务的网络地址与上传文件到内存
输入命令
setenv serverip 192.168.1.100
回车
接着输入
tftpboot 0x80100000 tftpd-uboot.bin
回车
SecureCRT窗口返回信息如下:
RT3052 #
10.等SecureCRT里显示2个Arp Timeout Check插上网线时,把网线插入路由器的LAN口(黄色的接口),随便哪个口都可以。
注意:如果没有提示成功下载到问题,千万不要继续下面的操作。等完全tftp上传好,出现NetBootFileXferSize= 00023874)后 (00023874为tftpd-uboot.bin文件大小的16进制数值,别的U-boot文件的值可能不同)
11.(五)解锁flash 保护
输入
protect off all
回车
12.(六)擦除U-BOOT
输入
erase 0xBF000000 0xBF03FFFF
回车
13.写入U-BOOT
输入
cp.b 0x80100000 0xBF000000 0x40000
回车
14.备份EEPROM
cp.b 0xBFFA0000 0x80100000 0x20000
md 0x80100000
erase 0xBF060000 0xBF07ffff
cp.b 0x80100000 0xBF060000 0x20000
md 0xBF060000
15.刷完系统会自行重启,如果没有重启请按Ctrl+C来重启机器,如果再不行就直接关路由器电源。
16.到这里u-boot刷完成,关闭tftpd32.exe
这里笔者刷的是tftpd版的uboot,这种方法还可以刷电信原版的uboot和httpd版的uboot。
注意:如果要刷eeprom要先刷tftfd版的uboot,再刷eeprom。刷httpd版后是不能刷eeprom的,因为eeprom是需要tftp刷的。"
