2016-05-16 54 views
0

私のシステムで奇妙な動作をする。 ubootからprintenvとsaveenvが正しく動作します。 userspace fw_printenvから、fw_setenvは何も保存せず、エラーやフィードバックも出ません。fw_setenvが動作しない、fw_printevが

これは私のfw_env.configあり、それは正しい

# cat /etc/fw_env.config 
# Configuration file for fw_(printenv/saveenv) utility. 
# Up to two entries are valid, in this case the redundant 
# environment sector is assumed present. 
# Notice, that the "Number of sectors" is ignored on NOR. 

# MTD device name Device offset Env. size Flash sector size Number of sectors 
/dev/mtd0  0x80000  0x40000  0x40000 1 
#/dev/mtd2  0x0000  0x4000  0x4000 

# NAND example 
#/dev/mtd0  0x4000  0x4000  0x20000   2 
# 

任意のアイデアですか?

これは、そう、それはlibの問題と思われるfw_setenv

execve("/usr/sbin/fw_setenv", ["fw_setenv", "pippo", "pippo"], [/* 11 vars */]) = 0 
brk(0)         = 0x2012000 
uname({sys="Linux", node="buildroot", ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ab91000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
open("/lib/tls/v7l/vfp/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat64("/lib/tls/v7l/vfp", 0x7ee54508) = -1 ENOENT (No such file or directory) 
open("/lib/tls/v7l/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat64("/lib/tls/v7l", 0x7ee54508)  = -1 ENOENT (No such file or directory) 
open("/lib/tls/vfp/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat64("/lib/tls/vfp", 0x7ee54508)  = -1 ENOENT (No such file or directory) 
open("/lib/tls/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat64("/lib/tls", 0x7ee54508)   = -1 ENOENT (No such file or directory) 
open("/lib/v7l/vfp/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat64("/lib/v7l/vfp", 0x7ee54508)  = -1 ENOENT (No such file or directory) 
open("/lib/v7l/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat64("/lib/v7l", 0x7ee54508)   = -1 ENOENT (No such file or directory) 
open("/lib/vfp/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
stat64("/lib/vfp", 0x7ee54508)   = -1 ENOENT (No such file or directory) 
open("/lib/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214\317\0\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=129092, ...}) = 0 
mmap2(NULL, 160612, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2abff000 
mprotect(0x2ac1f000, 28672, PROT_NONE) = 0 
mmap2(0x2ac26000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f) = 0x2ac26000 
close(3)        = 0 
open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214\177\1\0004\0\0\0"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=1238696, ...}) = 0 
mmap2(NULL, 1275280, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2ac27000 
mprotect(0x2ad51000, 32768, PROT_NONE) = 0 
mmap2(0x2ad59000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12a) = 0x2ad59000 
mmap2(0x2ad5c000, 9616, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ad5c000 
close(3)        = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ab5c000 
set_tls(0x2ab5c4c0, 0x2ab5cb98, 0x2ab9a058, 0x2ab5c4c0, 0x2ab9a058) = 0 
mprotect(0x2ad59000, 8192, PROT_READ) = 0 
mprotect(0x2ab99000, 4096, PROT_READ) = 0 
brk(0)         = 0x2012000 
brk(0x2033000)       = 0x2033000 
open("/etc/fw_env.config", O_RDONLY) = 3 
fstat64(3, {st_mode=S_IFREG|0755, st_size=422, ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ad5f000 
read(3, "# Configuration file for fw_(pri"..., 4096) = 422 
read(3, "", 4096)      = 0 
close(3)        = 0 
munmap(0x2ad5f000, 4096)    = 0 
stat64("/dev/mtd0", {st_mode=S_IFCHR|0660, st_rdev=makedev(90, 0), ...}) = 0 
mmap2(NULL, 266240, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aab0000 
open("/dev/mtd0", O_RDONLY)    = 3 
ioctl(3, MCE_GET_RECORD_LEN or MEMGETINFO or MFB_SET_CHROMA_KEY or MTRRIOC_SET_ENTRY, {type=MTD_NORFLASH, flags=MTD_WRITEABLE|MTD_BIT_WRITEABLE, size=0x100000, erasesize=0x10000, writesize=0x1, oobsize=0, padding=0xffffffff}) = 0 
lseek(3, 524288, SEEK_SET)    = 524288 
read(3, "\33\326PMbootdelay=3\0baudrate=115200\0"..., 262144) = 262144 
close(3)        = 0 
open("/dev/mtd0", O_RDWR)    = 3 
ioctl(3, MCE_GET_LOG_LEN or MEMERASE or MTRRIOC_DEL_ENTRY, {start=0x80000, length=0x40000}) = 0 
lseek(3, 524288, SEEK_SET)    = 524288 
write(3, "\307L\362Xbootdelay=3\0baudrate=115200\0"..., 262144) = 262144 
close(3)        = 0 
exit_group(0)       = ? 
+++ exited with 0 +++ 

のstraceのです。 私はramrofを生成するためにbuildrootを使用していますが、いくつかのライブラリはコンパイルされていないようです。 libgcc_s.so.1を修正するために、ポストビルドスクリプトにツールチェーンのフォルダから直接コピーを追加しました。 ldconfigの場合、私は現時点で何をすべきか分かりません。 G

+0

U-Bootとカーネルは、メインラインソースに基づいていますか。もしそうなら、バージョンを教えてくれますか?どのフラッシュチップがターゲット上にU-Boot環境を保持していますか? –

+0

そして、あなたはfw_printenvがうまくいっていますか?つまり、U-Bootで変数を設定し、それをLinuxで印刷しましたか?デフォルトでは、ツールとU-Bootバイナリを一緒にビルドし、入手したツールを使用すると、デフォルト環境が組み込まれます。 'fw_printenv>/dev/null'を実行しない限り、最初のエラーが見逃せない場合もあります(問題が発生しているstderrが表示されるように)。 –

+0

Nope、uboot、およびkernelは、チップベンダーのSDKにあります。 – JosephITA

答えて

0

fw_printenvが働くので

は、あなたのfw_env.configはい、正しいです。

環境が保存されているフラッシュチップのターゲットカーネルのサポートに問題がある可能性があります。私は、フラッシュチップがU-BootによってサポートされているUNLOCKおよびLOCKコマンドを持っていたが、カーネルのMTDフラッシュチップドライバではサポートされていなかった場所を見てきました。 erasing-flash-nor-ioctlmemunlock-return-statusを参照してください。

上記の記事の質問には、ターゲットでmtd-utilsを使用する良い例があります。あなたの場合は、あなたのターゲットのmtd0パーティションが書き込み可能かどうかを見るために、 "mtd_debug info/dev/mtd0 | grep flags"というユーザスペースを使うことができます。例えば、ドライバがioctl(UNLOCK)を行っているかどうかを確認するために、 "strace flash_erase 0xC0000 1"の出力をチェックできます。

+0

私はfw_printenvが本当にうまく動作するかどうかはわかりません。U-Boot自体が冗長環境を使用するように設定されている場合、fw_printenvは何かを印刷しますが、環境の古いコピーかもしれません。 – Arnout

0

私は照明を持っていました!私はubootで変数を設定しようとした後、ユーザー空間で読み返して、 "今動作すれば試してみましょう..."と言いました。私はいくつかのテストを行い、問題は私のシステムが "sf probe 0x0; sf unlock"を必要としていたことでした。環境variabilesを含むSPIメモリのロックを解除する!私はbootcmdにそれらを追加します!ありがとう!