-
Notifications
You must be signed in to change notification settings - Fork 2
/
log200808via.txt
1228 lines (1105 loc) · 72.6 KB
/
log200808via.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
11:35 2008-8-1
周报(7.28-8.1)
===============
0, 工作日5,40小时。上周周报"9:49 2008-7-28"。
1, 改进FM ETS 10
2, 写新FM芯片rda5802驱动。28小时。
3, 组内培训。Qtopia介绍。2小时。
Key Activities of the week:
1 Improve FM ETS. 10
2 write rda5802 driver. 28
3 Qtopia training. 2
Major Progress:
Issues:
TODO
1 finish rda5802 driver
2 update rda58xx driver document
11:56 2008-8-1
写backup.sh,位于app/backup/backup.sh。
用于备份代码,包括i2c/chip, media/radio, app, download四个目录的rda58xx相关内容。
用法:有参数1制定backup下具体目录,否则是月日小时时间。
15:30 2008-8-1
改写rda5802驱动,待做取消:
1, 文件名未改;
16:10 2008-8-1
疑问:
1, i2c_detach_client后是否需要kfree(client)?
16:57 2008-8-1
rda5802,待做转移
1, rda5802编程指南p7说tune需要10ms,判断是否是真台需要20ms。这样比rda5800时间短很多,代码功能完成后。提升效率时测试,修改。
12:32 2008-8-4
Linux,驱动,模块
编译模块时遇到undefined警告:
WARNING: "rda58xx_hw_device" [drivers/media/radio/radio-rda5800.ko] undefined!
其实这时在rda5800.ko中已经EXPORT了rda58xx_hw_device,但是编译模块时是从Module.symvers查找是否有此符号,由于没有重新Make内核,所以Module.symvers文件没有更新。
该文件格式包括符号名,符号所有者(如果是内核是vmlinux),EXPORT属性(EXPORT_SYMBOL或EXPORT_SYMBOL_GPL)。
0x00000000 rda58xx_hw_device drivers/i2c/chips/rda5800_m EXPORT_SYMBOL_GPL
13:37 2008-8-4
c语言,编程,arm-linux-gcc中enum的长度
david编译gstreamer库和Marvell库时遇到问题——有个字符串明明有值但是使用时提示该字符串指针是空。
由于涉及到gstreamer和Marvell库,二者编译选项不一致。david初步怀疑是枚举类型所占大小不一致。在适当位置加入调试信息后,证明了这一推断。
这时仔细比较二者的编译选项:
1, Gstreamer
arm-linux-gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_GNU_SOURCE -DG_LOG_DOMAIN=g_log_domain_gstreamer -DGST_MAJORMINOR=\"0.10\" -DGST_DISABLE_DEPRECATED -I../libs -I.. -I.. -pthread -I/home/david/linux-sound-debug/gstreamer/glib/include/glib-2.0 -I/home/david/linux-sound-debug/gstreamer/glib/lib/glib-2.0/include -I/home/david/linux-sound-debug/gstreamer/libxml/include/libxml2 -Wall -g -I/home/ftp/Marvell/pxalinux/toolchain/arm-linux-4.1.1/arm-iwmmxt-linux-gnueabi/include/ -I/home/david/linux-sound-debug/gstreamer/checklib/include/ -MT libgstreamer_0.10_la-gstpadtemplate.lo -MD -MP -MF .deps/libgstreamer_0.10_la-gstpadtemplate.Tpo -c gstpadtemplate.c -o libgstreamer_0.10_la-gstpadtemplate.o >/dev/null 2>&1
2, Marvell
arm-linux-gcc -I/home/david/linux-sound-debug/Marvell/pxalinux/installed/src/preview-kit/linux/include -I/home/david/linux-sound-debug/gstreamer/glib/include/glib-2.0 -I/home/david/linux-sound-debug/gstreamer/glib/lib/glib-2.0/include -I/home/david/linux-sound-debug/gstreamer/libxml/include/libxml2 -I/home/david/linux-sound-debug/gstreamer/gstreamerlib2/include/gstreamer-0.10 -I/home/david/linux-sound-debug/gstreamer/gstpluginsbaselib/include/gstreamer-0.10 -I/home/david/linux-sound-debug/gstreamer/checklib/include -g -Waggregate-return -Wmissing-noreturn -W -Wall -mcpu=iwmmxt -mtune=iwmmxt -mabi=aapcs-linux -DBMM_ENABLE -I/home/david/linux-sound-debug/Marvell/pxalinux/installed/src/gstreamer/src/gst_plugin/include/ -DHAVE_CONFIG_H -fPIC -g -c -o ./gstoverlay2VSelements.o ./gstoverlay2VSelements.c
把“-mcpu=iwmmxt -mtune=iwmmxt -mabi=aapcs-linux -DBMM_ENABLE”去掉后问题解决。
另外:http://www.broncho.cn/forum/viewtopic.php?f=21&t=36文中提到:
“加个-mcpu=xscale选项后, sizeof(enum)就等于4了”。
14:45 2008-8-4
Olympia, FM, rda5802
rssi基本是5-7,没有变化。
用LNAN后,2-3。
改天线,无变化。
修改LNA working current为3ma,无变化。
当前初始化数据:
0xC001, //02H:
0x1A10,
0x0600,
0x887a,//0x886A,//0x88AA, //05H:
14:44 2008-8-5
待做转移:
1, 请假(完成);
2, claire改form(完成);
3, 解决rda5802问题(完成)。
4, 看邮件(完成)。
5, LCD背光开关。
/linux-2.6.21_gavin/drivers/video/olympiafb/pxafb.c
pxafb_set_backlight函数
15:28 2008-8-5
rda5802问题:
王凯 kaiwang@rdamicro.com,分机706。
RDA办公室电话:62635360,找王凯。
王凯说:幅度:3v。精度:100ppm
找qinghua tong,现在幅度3v,精度10ppm,问题依旧。
发rda5802原理图发给王凯。等回复中。
(17:39 2008-8-5)王凯回复:
Bamvor Zhang,您好!
如果能听到沙沙声,应该是晶体起振电路工作了,需要您确认的两点:
1. 如果用的是两线,pin7即RST要一直为低;(一直是低)
2. 如果用FMIN,05H的bit[7:6]应为01;(是)
3. 读操作和写操作即写02H和读0A,0BH之间要有足够的延时;(延时大于400ms)。
根据您的描述,IIC应该是通的,如果还是收不到台您可以尝试:
1. 从天线端直接飞线出来,即从L1105飞线出来看看信号强度有无变化;(现在L1105是0欧姆电阻)
2. 可以尝试soft_reset芯片再进行tune等其他操作,即将02H寄存器先写0x0002,再写回0xc001,看看有没有效果;(现在就是如此)
顺便帮我看看我们提供给您的芯片批次是多少?(只看到:HC20828)
谢谢!有问题及时联系
(14:51 2008-9-3)实际就是从天线端直接飞出来天线这步有问题。详见"14:45 2008-8-11"的问题解决过程。
10:24 2008-8-11
Olmypia,FM,app测试版本
给ryan duan发了一个FM驱动:driver4app_0530。就是给qinghua tong测试用那个版本:
rda5800_1731.ko,radio-rda5800_2035.ko,rda5800_test_1942。
14:36 2008-8-11
jack 新内核usb net PC工作有问题。
(14:53 2008-9-3)for Linux host:配置usb net时不选择RNDIS support,for windows HOST,需要选择RNDIS support。否则工作不正常。
14:45 2008-8-11
FM,rda(瑞迪科)王凯,来公司支持
1, RDS:北京:106.1MHz,时间(不准),ps;上海:有。
2, 看16寄存器,判断vco起振是否正常.
reg16[9:0],vco bit,随频率升高升高而升高。reg16[10],
读16寄存器,97.4频点:
换芯片前:0001000111。
换芯片后:1001001000,这个基本在中间,正常。
3, 左右声道,隔直电容前。5800:900mv,5802:1.3v。实测:1.23。
4, 底噪大约12.
5, 建议:tune后等50-70ms,读rssi和freq。现在等待了100ms。
6, 最后发现是天线没有焊好——天线没有和芯片焊点接触。
(14:57 2008-9-3)不过印象中0001000111这个芯片是好是坏后来也没有实验,另外这时认为软件应该没有问题了。为了试验,把RDA评估板和1001001000这个芯片对换。发现1001001000芯片在评估板上工作正常。这样芯片也没有问题,现在只能查PCB布线了。"14:57 2008-9-3"end
/////同事信息/////
qinghua tong手机:13401010921。
18:08 2008-8-11
待做转移,明日计划;
1, 完成rda5802全部驱动:扫描整个频段,自动搜台,调整音量等。
2, 完成rda5802全部ETS。
3, 完成rda58xx其余未完成问题。
4, 写最近几周计划。详见gavin邮件。(完成)
14:11 2008-8-12
远程工具,
1, 用telnet登录板子。
2, 用putty保存log:
session->logginng, 右侧的Session logging中选择Printable output,再设置文件名,例如:E:\log\log&M&D&T.txt。
&M,&D和&T依次表示月份,日期和时间。
14:27 2008-8-12
usb gadget,usb net,g_ether.ko
昨天帮david设置板子到PC机上虚拟机的usb net。后来是使用了jack编译的usb net驱动,二者区别是jack给app编译的usb net驱动只包含,没有选中RDNIS。
16:56 2008-8-12
任务:
1, 本周完成FM;
2, gstreamer。release;确定具体能拨那些格式。
Gavin现有开发包:Olympia\multimedia\fromGavin\gstreamer.tar
3, 触摸屏和LCD总体不急。只是需要先实现完全关闭LCD。
17:21 2008-8-12
windows下使用nfs,失败,可能是由于开了防火墙,由组策略控制,我没有权限修改。
参考文档:
http://ygliang.blog.51cto.com/69909/52898
windows NFS 配置(链接如果打不开可以用google看网页快照)
http://developers.sun.com.cn/blog/liuyu/entry/windows%E7%8E%AF%E5%A2%83%E4%B8%8B%E8%AE%BF%E9%97%AEnfs
Windows环境下访问NFS
sfu下载地址: http://download.microsoft.com/download/a/1/c/a1ca7af1-a6e3-46e7-874a-4c5d8c0fb3b7/SFU35SEL_EN.exe
10:09 2008-8-13
Olympia,F628(清华同方)
整个团队的周报:
\\bjna02\VIA_TELECOM\Public\F628\Management\Weekly Report
本地位置:
E:\work\Olympia\project\F628\Weekly Report
待做:有时间把“\\bjna02\VIA_TELECOM\Public\F628\Management”内容重新看一下,打印。
10:14 2008-8-13
待做:
1, "10:09 2008-8-13"打印;
2, 完成最近八周任务;(完成,等待与Gavin讨论)
3, rda58xx:(暂缓,加入其它日志)
1), rda5802自动搜台。
2), "11:14 2008-8-13",根据chipid判断芯片是否配置正确。
3), 更新所有底层函数,对于5802没有的功能(例如DSP vol),应能提示出错。
rda58xx_V4L2_init中初始化rda58xx_radio_device.cur_status和rda58xx_radio_device中全部当前变量。
10:19 2008-8-13
Olympia,任务规划,待做
最近8周计划:
说明:
1, 主要由FM,Gstreamer和7-16原定计划组成。7-16计划的时间由于写更换FM芯片没有进行。
2, SVN服务器如果仍由我做,在任务2完成后进行。进入试运行状态大约需要一周。
1, 8-13~~8-15周:
完成FM驱动,更新FM文档。
2, 8-18~~8-22周,8-25~~8-29周:
1), gstreamer release:
1)-1, 建立完整的编译库;
1)-2, 确定具体能支持那些格式及系统负载(用top看资源占用或Marvell方案提供),需要保留所有测试样曲。
可能遇到的问题:gstreamer结构比较复杂,如果发现重要格式无法播放等bug,可能会delay一周。
2), 软件关闭LCD(LCD控制器和driver IC),关闭背光。1.5天。
3, 9-1~~9-5周:
1), 触摸屏,ADS7846:
1)-1, SPI分层,原理,2天;
1)-2, ets修改。1天;
2), LCD
避免TCS和LCD控制之间的竞争冲突(SPI)。2天
4, 9-8~~9-12周:
1), LCD
1)-1, abstract data type of the LCD Driver IC. Refer to generic.c
LCD ADT包括pxafb_mach_info和lcd driver id两部分。
1)-2, LCD Driver IC可以做独立的电源管理。pxafb.c中set_ctrlr_state中包含了fb电源管理。
1)-3, 修改pxafb.c ets。
5, 9-15~~9-19周(其中9-15中秋调休放假),9-22~~9-26周,9-29~~10-3周(整周放假),共9天:
1), 完成前面未完成的工作;2天
2), 若组内无其他工作安排,看david audio或xia camera的驱动代码。
13:52 2008-8-13
ETS,blob下载
1, 全部文件位于:“E:\work\Olympia\tools\ETS\blobDownload”。
2, ets_eric.rar覆盖现有ETS脚本。
3, mkkernel是脚本,调用etsmkimage程序编译出ETS映像,例如:
cp -f ./arch/arm/boot/zImage ./
./etsmkimage eimage_kernel.rom zImage 0x60000 jffs2/jffs2_cdc_ets.img 0x260000
语法:
etsmkimage 输出文件名 输入映像1 输入映像1在flash地址 [输入映像2 输入映像2在flash地址]
4, eimage_kernel.rom是包含kernel的ETS映像,eimage_kernel+rootfs.rom是包含内核和文件系统的ETS映像。
15:01 2008-8-13
FM, 进展,待做:
1, //var change,表示把dev->改为dev->curstatus.
待做,未完。
2, 当使用rda5802时rda58xx_setvol中不读回vol寄存器内容。
3, 为了解决rda5902中无V4L2_CID_GAIN问题,修改vidioc_g_ctrl,set_ctrl和vidioc_queryctrl。其中vidioc_g_ctrl 。
4, vidioc_g_frequency中设置f->reserved[ISSTATION_BIT](ISSTATION_BIT是0)是否有台。这可能会影响V4L2驱动的扩展性,待做:加入文档。
5, set_freq的返回值改为是否有台。但是这对于V4L2 ioctl返回值并没有影响。目前只能是通过vidioc_g_frequency得到。
有个想法:当调用vidioc_s_frequency时:
如果用户设置了f->reserved[ISSTATION_BIT](=1),这时如果设置的频率不是台,会返回错误信息。
如果用户未设置f->reserved[ISSTATION_BIT](=0),这时如果设置的频率不是台,不会返回错误信息。
错误信息需要自己定义。
待做:此节日志所涉及修改尚未测试。在建立Gstreamer release tree时间歇做这个工作。PC和board的ETS中相关部分都没有修改。
10:29 2008-8-14
Gstreamer,release包进展
参考资料:http://gstreamer.freedesktop.org/documentation/,gstreamer官方网站。
1, copy all tar package to "package" directory.
2, "14:55 2008-8-14"
gst-ffmpeg-0.10.4不用,编译有错。使用gst-ffmpeg-0.10.3。
3, Rules.make中CPP有错,暂时注释,等需要时再改
#bamvor.comment.2008-08-14
#CPP := $(CROSS_COMPILE)c++
注:应该为:
CPP := $(CROSS_COMPILE)gcc -E
4, 尽量使用configure解决问题。希望不建立build脚本起配置作用。希望仅仅使用下面这样的configure命令:
#CC=arm-linux-gcc已在Rules.make中定义。
#需要在Rules.make中定义HOST=arm-linux, CROSS_COMPILE=$(HOST)-
configure ./configure --prefix=PXA_ROOT_DIR --host=HOST
5, 考虑建立这样的Makefile:
1), make LIBNAME=库名称 操作名
LIBNAME:库名称,例如xml2。不需要指定版本,make根据Rules.make查找应该使用的版本。
操作名=all, configure, make, install, clean, script
其中make可以省略,script表示在库目录下建立包括注释的configure, make, make install三步的脚本。all表示执行configure,make, install, script四个操作。
也支持
make SUBDIRS=库路径 操作名
SUBDIRS表示编译哪个路径,例如libxml2-2.6.30。适合高级用户用户使用(例如:管理员尝试更新库)。
注:libxml2是XML toolkit from the GNOME project。
6, (10:19 2008-8-15)实际开始做了。
修改Rules.make,加入文档。
需要修改VIA_SRC_DIR和PXA_ROOT_DIR。前者是gstreamer目录,后者是marvell pxalinux install目录。
#VIA_SRC_DIR=/home/gavin/dev3/gstreamer/
VIA_SRC_DIR=/home/bamvor/dev/multimedia/gstreamer
#PXA_ROOT_DIR = /home/gavin/dev3/pxalinux/build
PXA_ROOT_DIR = /home/bamvor/dev/pxalinux/installed
7, 开始写顶层Makefile,参考Linux内核Makefile的M和SUBDIRS变量建立和使用LIBNAME和SUBDIRS。
Linux内核:
ifdef SUBDIRS
KBUILD_EXTMOD ?= $(SUBDIRS)
endif
ifdef M
ifeq ("$(origin M)", "command line")
KBUILD_EXTMOD := $(M)
endif
endif
":="与"?=":前者可以避免变量的递归展开,而且只能使用前面定义要的变量。例如,“跟我一起写Makefile”P26:
y := $(x) bar
x := foo
那么,y 的值是“bar”,而不是“foo bar”。
"?="表示如果变量之前定义过则什么也不做,如果未定义过按当前值给变量赋值。
"ifeq ("$(origin M)", "command line")"中origin函数可以确定变量来源,此语句表示如果M来自"command line",则执行。看起来M的用法更合适一些。
8, 如果直接这样写,就会导致,依次执行所有目录configure,再执行所有目录的make...,希望是先完全执行一个目录的,再执行第二个目录的。
all: configure make install script
configure:
make:
install:
clean:
script:
xx, (待做转移,置底)
考虑如果从命令行传入的LIBNAME包含多个库情况的处理。
10:43 2008-8-14
Linux学习,使用适当的命令
1, 删除空目录:rmdir dir_name, 而不是rm dir_name -rf。
后者功能太强了,不区分情况乱用可能会造成误删除;
如果确实需要使用-rf参数,删除前用ls查看是否可以安全删除。
2, 改变文件权限,例如增加可执行权限:
chmod a+x filename,而不是chmod 755 filename。
16:17 2008-8-14
待做完成:打印gstreamer文档;
16:58 2008-8-14
硬件,电源,自Phoenix Li
养成好习惯,从电源引出的正负极夹子,把负极夹子夹在正极线上,这样避免打开电源又没有使用这路夹子时,造成电源短路。
14:39 2008-8-15
1, 周报(8.4-8.8)。上周周报"11:35 2008-8-1"。
注:此次周报在8-15自08-07小组工作日志复制回log。
工作2天,16小时。其余三天请假。
Key Activities of the week: Hours
1 debug rda5802 driver. 16
Major Progress:
Major Data Points(Optional):
Data Table Here
Issues: Open Date
Key Action Items for Next Week:
1 finish rda5802 driver
2 update rda58xx driver document
2, 周报(8.11-8.15)
===============
0, 工作日5,40小时。上周周报"14:39 2008-8-15"1。
1, support FM application developer ( Ryan duan ) 4
2, rda FAE帮助调试rda5802 tune问题。 4
3, 继续为rda5802修改FM驱动。8
4, 通过usb net连接板子与虚拟机上Linux。4
5, 尝试在windows下建立nfs,由于防火墙问题失败。3
6, 做Gstreamer development包。 14
6, 阅读部分Gstreamer文档。 3
Key Activities of the week:
1 Support FM application developer (Ryan duan). 4
2 debug rda5802 tune problem with RDA FAE. 4
3 modify FM driver for rda5802. 8
4 connect board with virual machina with usb net. 4
5 try to using NFS in windows, failed because of firewall. 3
6 create gstreamer development package. 14
7 read gstreamer documentation. 3
Major Progress:
1 fix FM rda5802 tune problem
Issues:
TODO
1 finish gstreamer development package
2 test how many video/audio formats support by current development package.
14:46 2008-8-15
bash技巧,Special Parameters,目前还不是很理解,待做:深入学习
根据man bash目前了解的Special Parameters,集合下面脚本的运行结果说明。
#!/bin/bash
IFS="a13"
echo \$\* $*, \$\@ "$@", \$\# $#, \$\? $?, \$\- $-, \$\$ $$, \$\! $!, \$0 $0, \$\_ $_
$ ./Special_Parameters_test.sh 123 234 345
$* 2 2 4 45, $@ 123 234 345, $# , $? 0, $- hB, $$ 96 8, $! , $0 ./Speci l_P r meters_test.sh, $_
注释IFS句的结果:
$* 123 234 345, $@ 123 234 345, $# 3, $? 0, $- hB, $$ 9642, $! , $0 ./Special_Parameters_test.sh, $_ ./Special_Parameters_test.sh
现在基本明白的:
"$*"表示$1, $2..全部变量,不包括$0。会受IFS影响。
其中"*"表示Expands to the positional parameters, starting from one.
"$?"保存返回值;
"$$"保存进程ID;
"$0"保存文件名;
"$_":若直接执行保存文件名,若被调用保存调用者名称,等作用;
IFS The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is <space><tab><newline>.
我理解IFS中的字符会被视为Separator。
16:01 2008-8-15
可信计算,trusted computing
"J:\bamvor张健的文档\micro微电子与计算机\software软件设计\Introduction of Trusted Computing.ppt"。
参考链接:
https://www.trustedcomputinggroup.org/home
http://en.wikipedia.org/wiki/Trusted_Computing
10:39 2008-8-18
Gstreamer,release包进展,续
1, 原有Makefile改名为Makefile.0815,做如下修改:
1), 暂时不把库名称转化为库全称(含版本号)的功能加入Makefile,直接建立符号链接更直接。
2), 还是需要在每个目录下建立直接的configure文件,名称:build.configure
2, (16:37 2008-8-18)
1), install后,目录build/lib/pkgconfig,保存了*.pc,从gstreamer-0.10.20 开始的库在configure时应加入:--with-pkg-config-path=$VIA_BUILD_DIR/lib/pkgconfig/ 。
2), build目录($VIA_BUILD_DIR)作用:提供统一的查找目录便于pkconfig工作。
3), 对文档《A Map of MultiMedia Architecture》的修改:
9.4 gstreamer-0.10.20 build
sed ‘s/check_pic/check/’ configure
./configure --prefix=/home/gavin/dev3/gstreamer/build CC=arm-linux-gcc --host=arm-linux LDFLAGS=-L/home/gavin/dev3/gstreamer/build/lib --disable-valgrind CFLAGS="-I/home/gavin/dev3/gstreamer/build/include/glib-2.0/ -I/home/gavin/dev3/gstreamer/build/include"
改为
sed "s/check_pic/check/" configure > configure.new
mv configure configure.ori
mv configure.new configure
chmod --reference=configure.ori configure
echo prefix=\"$VIA_BUILD_DIR\", host=\"$HOST\", CC=\"$CC\"
#./configure --prefix=$VIA_BUILD_DIR --host=$HOST LDFLAGS=-L$VIA_BUILD_DIR/lib --disable-valgrind CFLAGS="-I$VIA_BUILD_DIR/include/glib-2.0/ -I$VIA_BUILD_DIR/include"
./configure --prefix=$VIA_BUILD_DIR --host=$HOST --disable-valgrind --with-pkg-config-path=$VIA_BUILD_DIR/lib/pkgconfig CFLAGS=-I$VIA_BUILD_DIR/include
i), 原有sed不正确;
ii), glib参数可以从pkgconfig得到,configure中不需要指明;
iii), CFLAGS=-I$VIA_BUILD_DIR/include的目的是避免编译时找不到check.h错误:
arm-linux-gcc -DHAVE_CONFIG_H -I. -I. -I../../.. -I../../../libs -I../../.. -I../../.. -pthread -I/home/bamvor/dev/multimedia/gstreamer/build/include/glib-2.0 -I/home/bamvor/dev/multimedia/gstreamer/build/lib/glib-2.0/include -I/home/bamvor/dev/multimedia/gstreamer/build/include/libxml2 -Wall -g -g -O2 -MT libgstcheck_0.10_la-gstbufferstraw.lo -MD -MP -MF .deps/libgstcheck_0.10_la-gstbufferstraw.Tpo -c gstbufferstraw.c -fPIC -DPIC -o .libs/libgstcheck_0.10_la-gstbufferstraw.o
In file included from gstbufferstraw.h:25,
from gstbufferstraw.c:31:
../../../libs/gst/check/gstcheck.h:32:19: error: check.h: No such file or directory
In file included from gstbufferstraw.h:25,
from gstbufferstraw.c:31:
../../../libs/gst/check/gstcheck.h:87: error: expected ')' before '*' token
../../../libs/gst/check/gstcheck.h:428: error: expected ')' before '*' token
gstbufferstraw.c: In function 'gst_buffer_straw_start_pipeline':
gstbufferstraw.c:90: warning: implicit declaration of function 'fail_if'
make[5]: *** [libgstcheck_0.10_la-gstbufferstraw.lo] Error 1
该日志出自:log/log.make_172615_all_gstreamer。
(15:41 2008-8-19)现在的解决方法是configure加入"--with-check=$VIA_BUILD_DIR"。这样更清楚。"15:41 2008-8-19"end
3, 编译到liboil。
liboil中不支持--with-pkg-config-path,所以直接使用"PKG_CONFIG_PATH":
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$VIA_BUILD_DIR/lib/pkgconfig
如果不加PKG_CONFIG_PATH的错误信息见日志:log.make_174815_all_liboil。
注:分析configure配置错误时,可以查看config.log对应出错信息附近的提示信息,可能对分析问题有帮助。
今天编写,修改的脚本备份:E:\work\Olympia\multimedia\backup\0818\script.tar
10:03 2008-8-19
Gstreamer,release包进展,续
1, 编译alsa-lib
===============
1), 删除alsa-lib目录下补丁文件和设备文件。建立: alsa-lib -> alsa-lib-1.0.13。
2), 把编译alsa-lib所需的PXA_HOST_DIR等在../../Rules.make(PXA_ROOT_DIR/src/Rules.make)中,只需把该文件的PXA_ROOT_DIR注释即可。PXA_ROOT_DIR使用set-env脚本中的定义。
3), 错误:
touch: cannot touch `/src/.config': No such file or directory
../../Rules.make:19: /src/.config: No such file or directory
make: *** No rule to make target `/src/.config'. Stop.
的原因是没有指定PXA_ROOT_DIR。
编译时使用alsa-lib/Makefile出错,和AC_PROG_LIBTOOL,LIBTOOL有关,详见日志"log.make_105250_all_alsa-lib",使用下面build脚本,正确:
tar -jxf alsa-lib-1.0.13.tar.bz2
cd alsa-lib-1.0.13
cat ../diff-makefile.patch | patch -p0
cat ../diff-alsa-lib-1.0.13.patch | patch -p0
cat ../diff-alsa-lib-1.0.13-01.patch | patch -p0
export PXA_HOST_DIR=$PXA_ROOT_DIR/rel/host
export HOST=arm-linux
./configure --prefix=$PXA_HOST_DIR --host=$HOST &> log.configure_`date +%H%M%S`_configure_alsa-lib
make &> log.make_`date +%H%M%S`_make_alsa-lib
make install &> log.make_`date +%H%M%S`_make_install_alsa-lib
这里没有使用CFLAGS,和gavin的文档一致,不知有没有影响。
Marvell的CLFAGS是"
WARNINGFLAG = -Waggregate-return -Wmissing-noreturn -W -Wall
CFLAGS = -I$(PXA_SRC_PVK_LNX_DIR)/include -I$(PXA_HOST_INCLUDE_DIR) $(LIBDIR) -g $(WARNINGFLAG) -mcpu=iwmmxt -mtune=iwmmxt -mabi=aapcs-linux
",对体系结构有影响的是"-mcpu=iwmmxt -mtune=iwmmxt -mabi=aapcs-linux",这和"13:37 2008-8-4"david编译时去掉的CFLAGS一致。估计这三个还是应该加上。
编译成功日志和失败日志位于“E:\work\Olympia\multimedia\backup\0819\log.alsa-lib.tar.gz”
2, 编译gst-plugins-base
=======================
先后提示liboil和gstreamer库不存在或不满足版本要求,后来发现是--with-pkg-config-path设置错误。
现有设置是--with-pkg-config-path="$VIA_BUILD_DIR/lib/pkgconfig:$PXA_ROOT_DIR/rel/host/lib/pkgconfig"。后者中存在alsa-lib.pc。
编译gst-plugins-base完成。争取下午完成全部库的编译,然后开始写依赖关系。正确明天上午完成。
依赖:liboil,alsa-lib,gstreamer。
3, 编译gst-plugins-good
=======================
1), 为什么disable-alsa?!
2), 也需要加CFLAGS=-I$VIA_BUILD_DIR/include避免编译时找不到check.h。
4, 编译gst-plugins-ugly
=======================
出错:
gstasfdemux.h:49: error: width of 'id' exceeds its type
注:编译日志见"log/log.make_145337_all_gst-plugins-ugly"。
查代码:
gst-plugins-ugly/gst/asfdemux/gstasfdemux.h:
typedef struct {
AsfPayloadExtensionID id : 16; /* extension ID; the :16 makes sure the
* struct gets packed into 4 bytes */
guint16 len; /* save this so we can skip unknown IDs */
} AsfPayloadExtension;
gst-plugins-ugly/gst/asfdemux/asfheaders.h
typedef enum {
ASF_PAYLOAD_EXTENSION_UNDEFINED = 0,
ASF_PAYLOAD_EXTENSION_DURATION
} AsfPayloadExtensionID;
5, 编译gst-plugins-bad
======================
CFLAGS="$CFLAGS -I$VIA_BUILD_DIR/include",把Rules.make中CFLAGS export出来,并引用此CFLAGS。
6, 编译gst-ffmpeg
=================
gst-ffmpeg中不支持--with-pkg-config-path,所以直接使用"PKG_CONFIG_PATH":
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$VIA_BUILD_DIR/lib/pkgconfig
7, 编译gst-marvell
==================
8, 完成的编译完成。
alsa-lib和gst_mvl两个目录都取自paxlinux目录下。这样结构更清楚。明天就是做依赖关系了。
xx, (待做取消)
1), 考虑如果从命令行传入的LIBNAME包含多个库情况的处理。
2), 现有Makefile需要修改,必须是先配置编译安装完第一个库才能配置第二个库,所以需要按照依赖关系改写顶层Makefile。
15:41 2008-8-19
帮Ryan duan下载音频驱动,1.5h,待做完成:记入周报
16:19 2008-8-20
Gstreamer,release包进展,续,make,Makefile学习
1,
困扰了半天的变量定义。开始一直是想把变量在命令中定义,后来不行又想通过$(shell ...)直接完成处理。最后发现其实把变量定义在外面就行了:
cur_target=$(word 2,$(subst _, ,$@))
cur_lib=$(word 3,$(subst _, ,$@))
$@是形如check_targetName_libName的目标规则。
2, 为了在check_targetName_libName和targetName_libName中cur_lib和cur_target都适用,需要求改原有定义。cur_lib很简单,可以用$(word $(words $@),test)或$(lastword text)。但cur_target有点麻烦,需要取倒数第二个单词。
不知道if函数中如果使用逻辑判断,只有用最笨的办法——如果没有第三个单词,说明改字符串只有两个单词,这时取第一个单词。否则取第二个单词。
cur_target=$(if $(word 3,$(subst _, ,$@)),$(word 2,$(subst _, ,$@)),$(word 1,$(subst _, ,$@)))
3, (18:04 2008-8-20)终于阶段性完成Makefile编写。吃完饭看看有没有什么遗漏的功能。
4, (19:10 2008-8-20)还是有问题,编译test2时如果test1已经编译,会认为test1现在不能configure,导致编译失败。原因是没有检查STATUS是否超过了configure_done_state。
修改Makefile,建立target_done_state_all,包括done和done后全部的STATUS状态。
本打算用$(findstring find,in)函数,但是失败。
原因:find字符串是cur_status=`cat $(cur_lib)/$(STATUS_FILE)`,在shell中才会展开,调用findstring函数时并不会展开。
解决:
case $(cur_status) in \
($($(cur_target)_ready_state)) \
echo $(cur_lib) is ready for $(cur_target) \
;; \
($($(cur_target)_done_state_all)) \
echo $(cur_lib) is $(cur_target)ed \
;; \
($($(cur_target)_not_ready_state)) \
echo $(cur_lib) is not ready for $(cur_target);exit 1;\
;; \
esac
5, (20:34 2008-8-20)需不需要state_init,把所有库的STATUS都改为NONE?如果不改,可能对cur_status=`cat $(cur_lib)/$(STATUS_FILE) 2> /dev/null`有影响。
6, 问题,待做完成:
1), test1 install完成后不应该把test2 STATUS改为READY。这可以通过check函数解决。check参数改为三个,分别是ready,already和not ready三种情况所需执行的命令。
而且需要state_init。
2), "check_%"规则应该是没用了,删除。
7, shell学习:Makefile中在自定义函数和make规则中shell命令应该用单行命令。对于单行命令,所有命令之间要加";"。
8, 注意:如果希望使用cur_lib, cur_targe两个变量,target名称需要满足:targetName是第一个,libName是最后一个。中间用"-"分割。
9, 新建了after_check。after_check有五个参数。前三个和check相同。4是cur_lib。5是lib_status。
待做完成:
1), after_check改名。(完成)
2), 合并after_check和check。可能是check调用前者;(完成)
3), 改进现有after_check的书写方法:(完成)
configure_for_after_test1:
$(call after_check,,,echo $(configure_ready_state) > test2/$(STATUS_FILE),test2,`cat test2/$(STATUS_FILE) 2> /dev/null`)
今天的进展是gstreamer_test.tar
18:46 2008-8-20
待做:查变量的模式替换。
10:51 2008-8-21
Gstreamer,release包进展,续,make,Makefile学习
1, 把build.configure脚本内容也移到Makefile中。把函数和规则局部变量结合起来。
不过这样就需要建立make script规则了:
build: build.configure, build.compile, build.install,每个build.*后都要检查状态。
2, (11:09 2008-8-21)现在基本工作已经完成了,还有两个内容:
1), 上面的1;
2), 解包。
3, 有可能需要修改的变量:
1), tartype_all保存所有tar包的扩展名,untar_%会根据扩展名选择不同的参数,目前:
tartype_all=tar.gz tar tgz
可能需要加:tar.bz2
4, (13:34 2008-8-21)
用lib_dep_test1:$(lib_dep_name_test1),报错:
bamvor@winson-desktop:/home/bamvor/dev/multimedia/gstreamer_test$ make dep_test2
make: *** No rule to make target `lib_dep_test2', needed by `dep_test2'. Stop.
最后只能改成:
lib_dep_test1:$(lib_dep_name_test1)
lib_dep_test2:$(lib_dep_name_test2)
开始用的是:
lib_dep_%:$(lib_dep_name_$(subst lib_dep_,,$@))
这样由于$(lib_dep_name_$(subst lib_dep_,,$@))是规则,所以不行,如果是变量赋值可以:
untar_%: libfullname=$(libfullname_$(cur_lib))
由于不能用模式,所以直接建立dep_xxx规则:
dep_%:
$(target_done)
dep_test2:test1
$(target_done)
加入文档,可能的修改:加入的库的依赖关系需要手工加入到上面的位置。如果不依赖任何库,不需要修改Makefile。
5, 目前进展:“gstreamer_test_08211348.tar”。
还需要去掉build.configure脚本,然后是实际结合gstreamer,修改,测试。估计得明天完成了。
今天到目前为止主要是学习了静态模式。但并不是很理解。4中的问题没有还需要解决,待做取消。
例子:
LIB_ALL=test1 test2 test3
$(LIB_ALL):%:dep_% configure_% compile_% install_% configure_for_next_%
$(target_done)
6, (17:29 2008-8-21)
去掉build.configure脚本:实验用的build.configure:
sed "s/check_pic/check/" configure > configure.new
mv configure configure.ori
mv configure.new configure
chmod --reference=configure.ori configure
echo prefix=\"$VIA_BUILD_DIR\", host=\"$HOST\", CC=\"$CC\"
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$VIA_BUILD_DIR/lib/pkgconfig
./configure --prefix=$VIA_BUILD_DIR --host=$HOST --program-suffix=.15
cat configure
echo this is `basename $PWD` directory
echo full command line variable is "$*".
echo $CC
echo $PKG_CONFIG_PATH
echo $CFLAGS
其中build.configure的固定参数是
-------------------------------
1), echo prefix=\"$VIA_BUILD_DIR\", host=\"$HOST\", CC=\"$CC\", CFLAGS=\"$CFLAGS\"
2), ./configure参数:--prefix=$VIA_BUILD_DIR --host=$HOST CFLAGS="$CFLAGS $EXTRA_CFLAGS"
可选的常见参数
--------------
1), ./configure参数:--with-pkg-config-path="$VIA_BUILD_DIR/lib/pkgconfig:$PXA_ROOT_DIR/rel/host/lib/pkgconfig
2), export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$VIA_BUILD_DIR/lib/pkgconfig:$PXA_ROOT_DIR/rel/host/lib/pkgconfig
其它参数
--------
1), shell_extra_command。extra shell命令集合
2), configure_extra_para。extra configure参数集合
最终结构:
加入四个变量,两对:
1), shell_extra_command;shell_command
2), configure_param;configure_extra_param
7, (18:23 2008-8-21)进展,待做完成:
make configure_test1通过,configure_test2有引号不匹配的错误,小问题,回去查错。晚上在家把脚本测试完成。明天结合gstreamer库测试,争取上午完成。
今日备份:备份了完成的我的包和脚本。其中set-env脚本位置是multimedia目录,就是gstreamer,gstreamer_test的上一级目录。
16:57 2008-8-21
周报(8.18-8.22)
====================
0, 工作日5,40小时。上周周报"14:39 2008-8-15"2。
1, “15:41 2008-8-19”, 帮Ryan duan下载音频驱动,1.5h
2, 完成Gstreamer development包。 38.5
Key Activities of the week:
1 Support FM application developer (Ryan duan). 1.5
2 finish gstreamer development package. 38.5
Major Progress:
Issues:
TODO
1 test how many video/audio formats support by current development package.
10:33 2008-8-22
Gstreamer,release包进展,续,make,Makefile学习
注:部分内容引用“跟我一起写Makefile”文章。
1, Makefile调试:
1), -q:查询是否有某个规则,无则报错,有则不提示。
为了保证没有不该出现的规则,都使用了静态模式:
LIB_ALL=test1 test2 test3
$(addprefix configure_,$(LIB_ALL)):configure_%:
这样只有configure_test1, configure_test2和configure_test3三个规则。
这样如果运行不存在的规则:
make -q configure_test123
make: *** No rule to make target `configure_test123'. Stop.
2), -p,输出Makefile中所有数据。如果实在找不到错误,可以用这个。能看到变量展开,规则执行的详细过程。
例如我查看make configure_test1时,发现configure_test1下面的"$*"自动变量是test1,查看make手册知道$*在静态模式中是%的内容(就是stem),在隐含规则中是stem。值得注意的是在pattern martch中,路径是不参与匹配的,所以e%t可以匹配src/eat,stem是src/a。
这样我的Makefile又可以简化:
configure_%: configure_extra_param=$(configure_extra_param_$(cur_lib))
可以改为:
configure_%: configure_extra_param=$(configure_extra_param_$*)
其中:cur_lib=$(word $(words $(subst _, ,$@)),$(subst _, ,$@))。
不过cur_lib在其它地方也用到。这样其实不如把
cur_lib=$(word $(words $(subst _, ,$@)),$(subst _, ,$@))
改为:
cur_lib=$*
->插播一个正则表达式,学习:
在学习中提高:
:.,$s/\(cur_lib\)/$(\1)/gc
把从当前行到最后一行的cur_lib替换为$(cur_lib),这里使用了group,\(和\)的作用是定义一个group,用\1--\9依次引用9个group。像这种增加内容的修改,用了group可以避免后面替换内容敲错:)
3), -n。不执行参数,这些参数只是打印命令,不管目标是否更新,把规则和连带规则下的命令打印出来,但不执行。一般来说遇到问题可以用这个参数。
2, Makefile模板编写完成。现在要做的就是套入gstreamer库了。
进展:gstreamer_test_08221127.tar
这个过程中需要把Makefile的结构整理好,既要机构清晰,又要便于用于修改。待做完成。
待做转移:将来要是通过configure脚本自动根据用户指定的依赖关系生成Makefile就好了。
3, (15:50 2008-8-22)
使用更多的静态模式:
把
$(addprefix dep_,$(no_dep_lib)):dep_%:
$(change_stage)
$(stage_done)
dep_test2:test1
$(stage_done)
改为:
$(addprefix dep_,$(LIB_ALL)):dep_%:
@if [ "$(dep_lib_$*)" != "" ]; then \
make $(dep_lib_$*); \
else \
$(change_stage); \
fi
$(stage_done)
即:如果有依赖的库,先make所依赖的库,否则直接修改stage为DEP。
这次终于又对Makefile明白一点了,其实如果需要调用其他规则直接再make target就行。要是早想到这个可能这个Makefile能写的更符合习惯。
其实还可以改进:待做取消:如果A有依赖的库B,检查A和B的STATUS的内容和修改时间,如果B是DONE,直接根据:
configure_for_next_test1:
$(call check_stage,\
,\
,\
echo $($(cur_stage)_done_stage) > test2/$(STATUS_FILE),\
echo $($(cur_stage)_ready_stage) > test2/$(STATUS_FILE),\
test2,\
`cat test2/$(STATUS_FILE) 2> /dev/null`\
)
类似方法调整STATUS。
否则直接修改stage为DEP。这样效率更高,逻辑更清楚。而且报错也会明确。
4, (18:17 2008-8-22)
修改configure_for_next_%部分,如果修改完成,增加新库会很简单。
->shell 脚本学习
================
开始遇到的问题
1), -bash: syntax error near unexpected token `('
问题原因是check_next所调用的check_state函数里面的case语句前面加了@,也就是不显示命令本身。但是现在这个函数位于shell命令for内部,sh并不认识这个@,所以报错。
2), 需要加$$这样在shell command中表示$,另外要用{}而不是(),否则shell会当作命令执行而不是认成变量。
$${lib}
configure_for_next_test1:
@for lib in ${next_lib_test1};do \
$(call check_next,$${lib});\
done
由于check_ready函数也调用了check_state函数,去调了@会造成check_ready函数显示很多shell命令,解决方法是把
check_ready=$(call check_stage,$(1),,,$(err_exit),$(cur_lib),$(cur_status))
改为
check_ready=@$(call check_stage,$(1),,,$(err_exit),$(cur_lib),$(cur_status))
。
另外由于使用换行符“\”,所以每个命令后面都需要";",否则会报错,例如:
bamvor@winson-desktop:/home/bamvor/dev/multimedia/gstreamer_test$ make configure_for_next_test1
if [ "test2 test3" != "" ];then \
for lib in test2 test3;do \
case `cat ${lib}/STATUS 2> /dev/null` in (DEP) echo ${lib} is ready for configure; ;; (CONFIGURE) echo ${lib} is configureed; ;; (COMPILE | INSTALL | DONE | DONE_ALL) echo ${lib} is configureed\(done after\); echo CONFIGURE > ${lib}/STATUS ;; (NONE) echo ${lib} is not ready for configure; echo DEP > ${lib}/STATUS ;; esac; \
done \
else \
echo no library depends on it \
fi
/bin/sh: Syntax error: end of file unexpected (expecting "fi")
make: *** [configure_for_next_test1] Error 2
================shell 脚本学习 结束==============
修改结果:
check_next=$(call check_stage,,,\
echo $($(cur_stage)_done_stage) > $(1)/$(STATUS_FILE),\
echo $($(cur_stage)_ready_stage) > $(1)/$(STATUS_FILE),\
$(1),$(call lib_status,$(1)))
configure_for_next_%:
if [ "$(next_lib_$*)" != "" ];then \
for lib in ${next_lib_$*};do \
$(call check_next,$${lib}); \
done \
else \
echo no library depends on it; \
fi
原有:
configure_for_next_test1:
$(call check_stage,\
,\
,\
echo $($(cur_stage)_done_stage) > test2/$(STATUS_FILE),\
echo $($(cur_stage)_ready_stage) > test2/$(STATUS_FILE),\
test2,\
`cat test2/$(STATUS_FILE) 2> /dev/null`\
)
configure_for_next_test2:
@echo no library depends on it
进展:编译gstreamer,第一次只是把check和glib install成功。但是gstreamer没有编译。难道是自动调用了并行处理?!可能是脚本有问题。待做完成:解决。(9-1,后来查明是依赖关系的问题)
17:42 2008-8-22
待做完成:问claire 2352考勤问题
23:15 2008-8-22
Gstreamer,release包进展,续,make,Makefile学习
1, 修改现存问题:
1), dep_%中原来没有考虑依赖多个包情况。
2), distclean中把全部no_dep_lib的stage都初始化为DEP。
3), 下班时遇到的gstreamer库没有编译没有查出问题。周日或周一把log打全看看。
10:19 2008-8-25
Gstreamer,release包进展,续,make,Makefile学习
1, make_slink_%中有个变量多个")",造成错误;
2, 执行顺序:
prep, distclean, lib
现在主要是没有考虑STATUS不存在情况下的处理。不如把distclean放到prep中。也就是prep表示完全重新编译。
3, check_ready的目的是如果当前状态不允许进行此操作则直接退出。但目前如果check_ready函数中出错,makefile仍然会继续执行。暂时不会解决这个问题。
删除了check_ready函数,check_next函数。删除了configure和compile下的$(change_stage)。现在就是dep的开始和install的结束考虑STATUS,这样编译后面的库就不需要重新make dep了。
4, (14:18 2008-8-25)
如果shell_extra_command_libname未定义,会提示:
/bin/sh: Syntax error: ";" unexpected
make: *** [configure_gst-plugins-good] Error 2
对于无内容的shell_extra_command_libname,需要定义为:
define shell_extra_command_libname
$(shell_extra_command_nop)
endef
5, (14:26 2008-8-25)
编译到了gst-plugins-good库。
(15:10 2008-8-25)
完成编译gavin的所有gstreamer开源包。
6, 使用说明:
1), 修改lib.make
2), 解包和其它准备工作:
make prep_libname &> log/log.make_`date +%H%M%S`_prep_libname
3), 编译:
make libname &> log/log.make_`date +%H%M%S`_all_libname
现有进展"E:\work\Olympia\multimedia\backup\0825\gstreamer_pre_release_08251815.tar.gz"
12:49 2008-8-25
shell,学习
把当前目录下除了glib-2.0.pc以外的文件移动到temp目录下
mv `ls | grep -v glib\-2\.0\.pc | grep -v temp` temp
或
mv `ls | egrep -v "(glib\-2\.0\.pc|temp)"` temp
16:25 2008-8-25
待做转移:
1, 确认在职证明是否审批完成,找claire。如果在职证明和清单都完成和渣打银行吴杰联系。本周办完手续。
10:19 2008-8-26
Gstreamer,release包进展,续,pre-release
文档:
1, 加入新库:
###############################################################################
# define packet name, extension, extract command. only support tarball at \
# present
libname_glib=glib
lib_tartype_glib=tar.gz
libfullname_glib=glib-2.12.12
dep_lib_glib=
next_lib_glib=gstreamer liboil
# define for configure stage: shell_extra_command and configure_extra_param
define shell_extra_command_glib
echo glib_cv_stack_grows=no>>arm-linux.cache; \
echo glib_cv_uscore=no>>arm-linux.cache; \
echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache
endef
configure_extra_param_glib=--cache-file=arm-linux.cache
EXTRA_CFLAGS_glib=
注意:shell_extra_command_libname中除最后一个命令,其它都需要以";\"结尾。
命令的执行顺序是:
1), 进入libname目录;
2), 执行shell_extra_command_libname;
3), 执行shell_extra_command;(目前仅仅显示prefix,host,CC,CFLAGS)
4), 执行./configure $(configure_param) $(configure_extra_param)
configure_param=--prefix=${VIA_BUILD_DIR} --host=${HOST} CFLAGS="${CFLAGS} ${EXTRA_CFLAGS}"
待做完成:对每个参数解释。
2, Makefile学习,调试
--warn-undefined-variables可以输出未定义变量,似乎有些变量不会输出:
bamvor@winson-desktop:/home/bamvor/dev/multimedia/gstreamer/gst_mvl$ make compile -n --warn-undefined-variables | grep undefined
Makefile:14: warning: undefined variable `CONFIG_CPU_MHNLV'
Makefile:19: warning: undefined variable `CONFIG_CPU_MHNL'
Makefile:26: warning: undefined variable `CONFIG_CPU_TAVOR'
Makefile:48: warning: undefined variable `MVED_ENABLE'
Makefile:80: warning: undefined variable `MVED_ENABLE'
Makefile:131: warning: undefined variable `LIBBMM'
Makefile:126: warning: undefined variable `LIBBMM'
3, 加入marvell gstreamer
在只需要编译的情况下,在Rules.make中加入PXA_SRC_GST_DIR定义:
bamvor@winson-desktop:/home/bamvor/dev/multimedia/gstreamer/gst_mvl$ cat ../Rules.make | grep PXA_SRC_GST_DIR
#PXA_SRC_GST_DIR := $(PXA_SRC_DIR)/gstreamer
PXA_SRC_GST_DIR := $(VIA_SRC_DIR)/gst_mvl
all规则只剩下compile,clean规则只剩下clean-local,加入install, distclean两个规则。前者为空。后者执行clean规则。
4, (15:41 2008-8-26)
进展:测试,现在make untar和make configure都有错。
xx,待做转移,置底
==============
0), 后面还有alsa-lib,marvell包和install步骤。(完成)
另外需改为"prep: prep_%",这样如果有些库有特殊处理也容易加入。(完成,待测试)
目前进展位于:"E:\work\Olympia\multimedia\backup\0825\script_08251515.tar.gz"
1), 需要在Makefile中加入check_env规则,检查env是否正确:环境变量是否为空,目录是否齐全,是否有响应的权限。
2), 加入make script规则。
3), first_lib需要支持多个。(似乎没必要了,因为现在依赖关系是由后面的库判断的)(完成,已删除)
4), 加入完整的distclean(完成,待测试)
5), (18:16 2008-8-25)已经把alsa-lib和gst_mvl拷贝到package目录,接着改脚本即可。
6), david说gst_mvl目录下面能替换的头文件和库都应替换为我们的。
7), 按"19:04 2008-8-26"文件解决方法修改"__gst_debug_min"未定义问题。需要在EXTRA_CFLAGS中加入link gstreamer-0.10.20库的参数。
8), (22:14 2008-8-28)给david时,提醒6)未完成。另外,想清楚需要哪些文件。
15:19 2008-8-26
潘鹏,CDMA bug
1, 问题描述:
============
cdma moderm数据有错。
有一个长数据偶然情况下会出错。有一个出错记录中,长数据是在几十个字节后出的错。感觉是时钟偏差造成的(估计不是,见3)。
使用cdma moderm自己的ETS监测,数据正确。
潘鹏感觉与amixer向写调试串口数据也有关系。(潘鹏正在做进一步的验证,完成)
原来没有这个问题。待做完成:问原来是什么时候,问硬件做了哪些改变;见3。
2, 思路:
========
看kernel中CDMA moderm接收数据是否正确。借此判断文件是硬件问题还是软件问题。
1), 经确认现有内核没有使用DMA("CONFIG_SERIAL_PXA_DMA"未设置)。
(11:10 2008-8-27)开启方法见"10:35 2008-8-27"3)。"11:10 2008-8-27"end
看来分析pio_receive_chars函数是正确的。
该函数接收数据直到count从256减为0,或data ready不成立。(待做:查data ready条件)
此函数中的tty_flip_buffer_push,gavin说,这是向上一层传本次收到的数据。
现在需要根据条件判断数据流向:
if (tty->low_latency)
flush_to_ldisc(&tty->buf.work.work);
else
schedule_delayed_work(&tty->buf.work, 1);
暂时没找到,查找low_latency,多数是1。先按1分析,到时在打log确认。
根据分析,wordqueue也会调用flush_to_ldisc函数:
static void initialize_tty_struct(struct tty_struct *tty)
{
//...
INIT_DELAYED_WORK(&tty->buf.work, flush_to_ldisc);
//...
}
3, 与潘鹏进一步讨论:
====================
原来上一版软件与目前的主要区别是加入了amixer,测试使用amixer时cdma moderm是否工作正常。
发现如果运行amixer配置脚本(phone....),每次都有出错(共测试三次):
正确:
"0000021002020702c4d946a5d684089b000310000001862212e0532b63b423608ba8fa7f0ba9429b0add1311b801630540018001c33842f0829aaa71d001d275d3608af0080190018801a80170019801aa8a19800b38027a747ec359f4c4e80188018001800170018001828a180163fc728a1801800170018001828a19800b38027a747ec359f4c4e80180017afc2bf7698083608ba8fca7b44261808803060808261556290801000a0100"
错误:
"0000021002020702c4d946a5d684089b000310000001862212e0532b63b423608ba8fa7f0ba9429b0add1333842f0829aaa71d001d275d3608af0080190018801a80170019801aa8a19800b9f4c4e80188018001800170018001828a180163fc728a1801800170018001828a19800b38e80180017afc2bf7698083608ba8fca7b44261808803060808261556290801000a0100"
和正确数据对齐后的错误数据:
"0000021002020702c4d946a5d684089b000310000001862212e0532b63b423608ba8fa7f0ba9429b0add13 33842f0829aaa71d001d275d3608af0080190018801a80170019801aa8a19800b 9f4c4e80188018001800170018001828a180163fc728a1801800170018001828a19800b38 e80180017afc2bf7698083608ba8fca7b44261808803060808261556290801000a0100"
可以看到,错误的数据时间
完整log位于:E:\work\Olympia\driver\CDMA\0826\CDNA-ATlog.txt
通过tty2socket把网络上发给12345端口的数据做为AT命令发给CDMA moderm。所使用的AT命令:
AT+CMGF=0
AT+CMGL=6
注:
1), tty2socket位于“E:\work\Olympia\driver\CDMA\0826\tty2socket”。
2), AT+CMGL是读短信。
进展:现在看来很可能是系统负载造成的这个问题。先看内核中收到的数据有没有丢失(中断时,中断后)。然后再继续分析。看看其它负载会不会有影响。
预计明后天会定位清楚。
待做:问潘鹏,硬件报这个错误时的条件是什么。
(20:08 2008-8-26)
加入bamvor debug便于调试。不过首先得从CC上得到最新内核。
19:04 2008-8-26
Qtopia,Gstreamer,陈帅
陈帅的Qtopia加载gstreamer库时会报错:有未解析的符号:__gst_debug_min。
现在怀疑是由于Qtopia开了debug选项,但gstreamer没有开debug选项。
后来发现__gst_debug_min定义在gstreamer-0.10.20/gst/gstinfo.c中。david的发现其它gstreamer库并没有link gstreamer-0.10.20库,这样造成在这些库中符号未定义。手工在编译选项中link了gstreamer-0.10.20库。
10:35 2008-8-27
潘鹏,CDMA bug,续
1, 得到最新内核,编译测试。
1), 从JackWu处得到最新CC上内核。修改了"arch/arm/mach-pxa/littleton.c",pxa3xx_enable_ffuart_pins函数:
pxa3xx_gpio_set_level(MFP_PIN_GPIO77, GPIO_LEVEL_HIGH);
原来是LOW(待查)。
注释了顶层Makefile的:
#bamvor.comment.2008-8-27
#ARCH = arm
#CROSS_COMPILE = /usr/local/marvell/arm-linux-4.1.1/bin/arm-linux-
#bamvor.comment.2008-8-27.end
2), 另外,串口DMA支持位于:
Device Drivers --->
Character devices --->
Serial drivers --->
PXA2xx/PXA3xx Processor serial port DMA support
目前该选项没有打开。
3), 直接编译内核出错:
bamvor@winson-desktop:/home/bamvor/dev/linux-2.6.21_CC0827$ make &> log/log.make_`date +%H%M%S`_all
bamvor@winson-desktop:/home/bamvor/dev/linux-2.6.21_CC0827/log$ cat log.make_105353_all
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf -s arch/arm/Kconfig
*** Error during writing of the kernel configuration.
make[2]: *** [silentoldconfig] Error 1
make[1]: *** [silentoldconfig] Error 2
CHK include/linux/version.h
make: *** No rule to make target `include/config/auto.conf', needed by `include/asm-arm/.arch'. Stop.
把所有文件加上所有者写权限后完成(chmod -R u+w *)。
下载这个新内核前,需要测试昨天潘鹏告诉我的方法是否正确。(完成)
现有release位于:
ftp://10.2.128.245/olympia/release。
本机:E:\work\Olympia\release。
后面内核编译正确。
2, "16:40 2008-8-27"
目前是在drivers\serial\pxa.c的pio_receive_chars加入bprintk调试语句:
static inline void pio_receive_chars(struct uart_pxa_port *up, int *status)
{
struct tty_struct *tty = up->port.info->tty;
unsigned int ch, flag;
int max_count = 256;
do {
ch = serial_in(up, UART_RX);
bprintk("name: <%s>, value: <0x%x>.\n", up->name,ch);
//...
}
基本"at+cmgl=6"命令,只能显示前几个字符(10个以内),详见"E:\work\Olympia\driver\CDMA\0827\1427\1"。