imx6笔记--uboot


文章摘要:
本文主要描述了imx6 uboot编译及详细说明。

硬件平台: 正点原子i.mx6u-alpha


清除编译:

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

生成默认配置:

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig 

mx6ull_alientek_emmc_defconfig

编译u-boot:

$ make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

生成文件说明:

u-boot: 编译出来的ELF格式的uboot镜像文件
u-boot.bin: 编译出来的 二进制格式uboot可执行镜像文件
u-boot.cfg: uboot的另外一种配置文件
u-boot.imx: u-boot.bin添加头部信息以后的文件,NXP的CPU专用文件
u-boot.lds: 链接脚本
u-boot.map: uboot映射文件,通过查看此可以知道某个函数被链接到了哪地址上
u-boot.srec:S-Record格式的镜像文件
u-boot.sym: uboot符号文件
u-boot-nodtb.bin:和u-boot.bin一样,u-boot.bin就是 u-boot-nodtb.bin的复制文件

注意事项:
NXP的uboot也需要添加专用的head信息才能用于启动;
执行make命令时会自动执行该命令生成u-boot.imx文件,无须单独操作。

以下列出命令参数以供参考:

$ ./tools/mkimage -n board/freescale/mx6ullevk/imximage-ddr512.cfg.cfgtmp -T imximage -e 0x87800000 -d u-boot.bin u-boot.imx 
Image Type:   Freescale IMX Boot Image
Image Ver:    2 (i.MX53/6/7 compatible)
Mode:         DCD
Data Size:    385024 Bytes = 376.00 kB = 0.37 MB
Load Address: 877ff420
Entry Point:  87800000

-n 指定image文件的名子?
-T 指定输入文件的类型,如"kernel"、"filesystem"、"firmware"、"ramdisk"
-e 内核程序入口地址
-d 指定输入的程序文件

- 阅读全文 -

rtmp服务器搭建


文章摘要:
硬件平台:树莓派
软件列表:nginx + ffmepg + vlc


1.首先安装libnginx-mod-rtmp模块

$ sudo apt-get install libnginx-mod-rtmp

2.配置nginx: 修改/etc/nginx/nginx.conf

# 添加以下代码 
rtmp
{
    server
    {
        listen 1935;
        chunk_size 4096;
        application live
        {
            live on;
        }
    }
}

3.重启nginx


4.采用ffmpeg推流
视频播放:

$ ffmpeg -i How.I.Met.Your.Mother.S07E01.mp4 -f flv rtmp://127.0.0.1:1935/live/123

采集摄像头信息:

$ ffmpeg -f video4linux2 -s 800*600 -r 24 -i /dev/video0 -f flv rtmp://127.0.0.1:1935/live/123

-f 指定视频格式(rtmp必须指定输出格式为flv)
-s 指明帧尺寸
-r 指明帧率(每秒的帧数)
-i 指明输入设备


5.利用播放器播放

用ffplay播放:

$ ffplay -i rtmp://127.0.0.1:1935/live/123

在树莓派上用VLC播放器, 播放地址 rtmp://127.0.0.1:1935/live/123
在其他主机上用VLC播放器,播放地址 rtmp://192.168.10.150:1935/live/123

- 阅读全文 -

sed与awk学习笔记--awk


几个关键字:
NR - 行号
NF - 本行的字段数
$0 - 本行的全部内容

分隔符可用正则表达式来表示:

-F - 命令行的分隔符
FS - 脚本文件分隔符,


流程控制语句:

next - 结束本次操作,程序继续执行后边的行操作
exit - 结束进程,后边行数也不在执行

批量修改文件名称:

BEGIN{
    print "Begin"
}
/Python/{
    # 原始文件名(如果有空格的话,需要用引号圈起来)
    str1="\""$0"\"" 

    # 处理新文件名
    str2 = ""
    i = 4;
    while ( i < NF )
    {
        str2 = str2"_"$i
        i++
    }
    str2 = str2"."$NF

    # 移除文件名中不需要的文字
    sub(/_/,"",str2)
    sub(/\)/,"",str2)
 #  print str2

    args=(str1" "str2)
#   print args
    system("mv " args)
}

END{
    print "End"
}

- 阅读全文 -

Linux系统应用--systemd服务(三)


文章摘要: 本文主要描述了systemd服务timer类的应用。

[Timer]

设定参数参数意义说明
OnActiveSec当 timers.target 启动多久之后开始执行
OnBootSec当开机完成后多久之后才执行
OnStartupSec当systemd第一次启动之后过多久才执行
OnUnitActiveSec配置文件所管理的那个服务在最后一次启动后,隔多久再执行一次
OnUnitInactiveSec配置文件所管理的那个服务在最后一次停止后,隔多久再执行一次。
OnCalendar使用实际时间 (非循环时间) 的方式来启动服务。
Persistent当使用 OnCalendar 的设定时,指定该功能要不要持续进行,通常是设定为 yes,类似于anacron的功能
Unitservice与timer的名称相同时,一般不需要设置,如果名称不相同时(比如多个timer对应同一个service时,需要通过Unit项指定service

示例: 开机后2小时开始执行一次,然后每两天要执行一次

# /etc/systemd/system/backup.timer


[Unit]
Description=backup timer test

[Timer]
# 开机后执行延时,单位为秒,可采用hrs,days来指定单位
OnBootSec=2hrs
# 定时时间
OnUnitActiveSec=2days
# timer与service名称一致时,不需要指定Unit项

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload 
# systemctl enable backup.timer 
Created symlink from /etc/systemd/system/multi-user.target.wants/backup.timer to /etc/systemd/system/backup.timer.
# systemctl restart backup.timer 
# systemctl list-unit-files | grep 'backup'
backup.service    disabled #个不需要启动!只要 enable backup.timer 即可!
backup.timer      enabled 

显示 timer 服务启动的时间:

# systemctl show time
ConditionTimestamp=五 2019-11-08 07:42:28 CST   

显示 backup.service 上次执行的时间:

# systemctl show backup.service
ExecMainExitTimestamp=五 2019-11-08 07:52:28 CST    

下一次执行距离 timers.target 的时间

# systemctl show backup.timer 
NextElapseUSecMonotonic=2d 19min 11.540653s   
 

由于 timer 是由 timers.target 这个 unit 所管理的,backup.timer 所纪录的下次运行时间,其实是与 timers.target 所纪录的时间差。


一个固定日期运作示例: 每周日2点整执行

# /etc/systemd/system/backup2.timer 
[Unit]
Description=backup server timer test2
    
[Timer]
OnCalendar=Sun *-*-* 02:00:00
Persistent=true
# 当定时任务与执行任务名称不一致时,需要指明service
Unit=backup.service

[Install]
WantedBy=multi-user.target
# systemctl daemon-reload 
# systemctl enable backup2.timer 
# systemctl start backup2.timer    
# systemctl show backup2.timer 
NextElapseUSecRealtime=50y 8month 5d 8h 

下次执行时间:
50y = 1970 + 50 = 2020(从1970年开始算)
8month = 9月(从0开始算)
5d = 6日
8h = 08:00:00
8h 2min 30s = 08:02:30

- 阅读全文 -


Copyright©2025 春天花会开, All Rights Reserved. Email: webmaster@oroct.com