raspberry pi /boot/config.txt configuretion

原文链接
由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在"config.txt"这个文本文件中.

树莓派的config.txt文件会在ARM内核初始化之前被GPU读取.

可以使用下列命令去获取当前激活的设置:

get_config <config> 含义
vcgencmd get_config int 所有已设置的整形配置参数
vcgencmd get_config str 所有已设置的字符型配置参数

e.g. vcgencmd get_config arm_freq

文件格式

当值是整形时格式为"属性=值". 每行只指定一个参数.
注释使用'#'井号作为一行开头.

下面是示例文件

# Set stdv mode to PAL (as used in Europe) sdtv_mode=2
# Force the monitor to HDMI mode so that sound will be sent over HDMI cable
hdmi_drive=2
# Set monitor mode to DMT
hdmi_group=2
# Set monitor resolution to 1024x768 XGA 60Hz (HDMI_DMT_XGA_60)
hdmi_mode=16
# Make display smaller to stop text spilling off the screen
overscan_left=20
overscan_right=12
overscan_top=10
overscan_bottom=10

这是另一个示例文件, 包含了各种功能的扩展文档.

内存

params default desc
disable_l2cache 0 禁止ARM访问GPU的二级缓存. 相应的需要在内核中关闭二级缓存. 默认关闭.
gpu_mem GPU 64 内存以兆为单位. 设置ARM和GPU之间的内存分配. ARM会获得剩余所有内存. 最小设为16.
gpu_mem_256 NaN 对于有256MB内存的树莓派的GPU内存设置. 512MB的派请忽略. 会覆盖gpu_mem. 最大设为192. 默认不设置
gpu_mem_512 NaN 对于有512MB内存的树莓派的GPU内存设置. 256MB的派请忽略. 会覆盖gpu_mem. 最大设为448. 默认不设置
disable_pvt 0 禁止每500毫秒调整一次RAM的刷新率 (RAM温度测量).

CMA - 动态内存分配

自2012年11月19号, 固件和内核开始支持CMA, 这意味运行时可以动态管理ARM和GPU之间的内存分配. 这儿有相关config.txt示例.
cma_lwm 当GPU可用内存低于cma_lwm所设值, 将会向ARM请求一些内存.
cma_hwm 当GPU可用内存高于cma_hwm所设值, 将会向ARM释放一些内存.
要启用CMA,下面的参数需要添加到cmdline.txt文件里:
coherent_pool=6M smsc95xx.turbo_mode=N
官方讨论

视频

视频模式选项

sdtv_mode 为复合信号输出设置视频制式(默认为0)

sdtv_mode=0    NTSC
sdtv_mode=1    日本版NTSC – 无基座 
sdtv_mode=2    PAL
sdtv_mode=3    巴西版PAL – 副载波为525/60而不是625/50

sdtv_aspect 为复合信号输出设置宽高比(默认为1)

sdtv_aspect=1  4:3
sdtv_aspect=2  14:9
sdtv_aspect=3  16:9

sdtv_disable_colourburst 禁止复合信号输出彩色副载波群. 图片会显示为单色, 但是可能会更清晰

sdtv_disable_colourburst=1  禁止输出彩色副载波群

hdmi_safe 使用"安全模式"的设置去尝试用HDMI最大兼容性启动. 这和下面的组合是一个意思: hdmi_force_hotplug=1, config_hdmi_boost=4, hdmi_group=2, hdmi_mode=4, disable_overscan=0

hdmi_safe=1

hdmi_ignore_edid 如果你的显示器是天朝产的垃圾货, 允许系统忽略EDID显示数据

hdmi_ignore_edid=0xa5000080```
hdmi_edid_file 当设为1时, 将会从edid.dat文件中读取EDID数据,而不是从显示器.[1]

hdmi_edid_file=1```
hdmi_force_edid_audio 伪装成支持所有音频格式播放, 即便报告不支持也允许通过DTS/AC3.

hdmi_force_edid_audio=1```
hdmi_force_edid_3d 伪装成全部CEA模式都支持3D, 即便EDID并不支持.

hdmi_force_edid_3d=1```
avoid_edid_fuzzy_match 禁止去模糊匹配EDID中描述的模式. 即便遮蔽错误, 也选用匹配分辨率和最接近帧率的标准模式.

avoid_edid_fuzzy_match=1```
hdmi_ignore_cec_init 不发送初始化激活源消息. 避免在重启时使(启用CEC)TV结束待机并切换频道.

hdmi_ignore_cec_init=1```
hdmi_ignore_cec 伪装成TV不支持CEC. 将不会支持任何CEC功能.

hdmi_ignore_cec=1```
hdmi_force_hotplug 伪装成HDMI热插拔信号被检测到, 出现HDMI显示器被接入

hdmi_force_hotplug=1 即便没有检测到HDMI显示器也要使用HDMI模式```
hdmi_ignore_hotplug 伪装成HDMI热插拔信号没有被检测到, 出现HDMI显示器未接入

hdmi_ignore_hotplug=1 即便检测到HDMI显示器也要使用混合模式```
hdmi_pixel_encoding 强制像素编码模式. 默认情况下会使用EDID请求的模式, 所以不需要修改.

hdmi_pixel_encoding=0 default (limited for CEA, full for DMT)
hdmi_pixel_encoding=1 RGB limited (16-235)
hdmi_pixel_encoding=2 RGB full ( 0-255)
hdmi_pixel_encoding=3 YCbCr limited (16-235)
hdmi_pixel_encoding=4 YCbCr limited ( 0-255)```
hdmi_drive 选择HDMI还是DVI模式

hdmi_drive=1 DVI模式 (没声音)
 hdmi_drive=2 HDMI模式 (如果支持并已启用将有声音输出)
hdmi_group 设置HDMI类型```

不指定组, 或者设为0, 将会使用EDID报告的首选组.

hdmi_group=1 CEA
hdmi_group=2 DMT


hdmi_mode 设置在CEA或DMT格式下的屏幕分辨率

当hdmi_group=1 (CEA)时,下列值有效
hdmi_mode=1 VGA
hdmi_mode=2 480p 60Hz
hdmi_mode=3 480p 60Hz H
hdmi_mode=4 720p 60Hz
hdmi_mode=5 1080i 60Hz
hdmi_mode=6 480i 60Hz
hdmi_mode=7 480i 60Hz H
hdmi_mode=8 240p 60Hz
hdmi_mode=9 240p 60Hz H
hdmi_mode=10 480i 60Hz 4x
hdmi_mode=11 480i 60Hz 4x H
hdmi_mode=12 240p 60Hz 4x
hdmi_mode=13 240p 60Hz 4x H
hdmi_mode=14 480p 60Hz 2x
hdmi_mode=15 480p 60Hz 2x H
hdmi_mode=16 1080p 60Hz
hdmi_mode=17 576p 50Hz
hdmi_mode=18 576p 50Hz H
hdmi_mode=19 720p 50Hz
hdmi_mode=20 1080i 50Hz
hdmi_mode=21 576i 50Hz
hdmi_mode=22 576i 50Hz H
hdmi_mode=23 288p 50Hz
hdmi_mode=24 288p 50Hz H
hdmi_mode=25 576i 50Hz 4x
hdmi_mode=26 576i 50Hz 4x H
hdmi_mode=27 288p 50Hz 4x
hdmi_mode=28 288p 50Hz 4x H
hdmi_mode=29 576p 50Hz 2x
hdmi_mode=30 576p 50Hz 2x H
hdmi_mode=31 1080p 50Hz
hdmi_mode=32 1080p 24Hz
hdmi_mode=33 1080p 25Hz
hdmi_mode=34 1080p 30Hz
hdmi_mode=35 480p 60Hz 4x
hdmi_mode=36 480p 60Hz 4xH
hdmi_mode=37 576p 50Hz 4x
hdmi_mode=38 576p 50Hz 4x H
hdmi_mode=39 1080i 50Hz reduced blanking
hdmi_mode=40 1080i 100Hz
hdmi_mode=41 720p 100Hz
hdmi_mode=42 576p 100Hz
hdmi_mode=43 576p 100Hz H
hdmi_mode=44 576i 100Hz
hdmi_mode=45 576i 100Hz H
hdmi_mode=46 1080i 120Hz
hdmi_mode=47 720p 120Hz
hdmi_mode=48 480p 120Hz
hdmi_mode=49 480p 120Hz H
hdmi_mode=50 480i 120Hz
hdmi_mode=51 480i 120Hz H
hdmi_mode=52 576p 200Hz
hdmi_mode=53 576p 200Hz H
hdmi_mode=54 576i 200Hz
hdmi_mode=55 576i 200Hz H
hdmi_mode=56 480p 240Hz
hdmi_mode=57 480p 240Hz H
hdmi_mode=58 480i 240Hz
hdmi_mode=59 480i 240Hz H
H表示16:9比例(正常是4:3).
2x表示双倍像素(即更高的像素时脉, 每个像素重复两次)
4x表示四倍像素(即更高的像素时脉, 每个像素重复四次)```

当hdmi_group=2 (DMT)时,下列值有效
像素时脉是有限制的, 最高支持的模式是1920x1200 @60Hz with reduced blanking.

hdmi_mode=1    640x350   85Hz
hdmi_mode=2    640x400   85Hz
hdmi_mode=3    720x400   85Hz
hdmi_mode=4    640x480   60Hz
hdmi_mode=5    640x480   72Hz
hdmi_mode=6    640x480   75Hz
hdmi_mode=7    640x480   85Hz
hdmi_mode=8    800x600   56Hz
hdmi_mode=9    800x600   60Hz
hdmi_mode=10   800x600   72Hz
hdmi_mode=11   800x600   75Hz
hdmi_mode=12   800x600   85Hz
hdmi_mode=13   800x600   120Hz
hdmi_mode=14   848x480   60Hz
hdmi_mode=15   1024x768  43Hz  DO NOT USE
hdmi_mode=16   1024x768  60Hz
hdmi_mode=17   1024x768  70Hz
hdmi_mode=18   1024x768  75Hz
hdmi_mode=19   1024x768  85Hz
hdmi_mode=20   1024x768  120Hz
hdmi_mode=21   1152x864  75Hz
hdmi_mode=22   1280x768        reduced blanking
hdmi_mode=23   1280x768  60Hz
hdmi_mode=24   1280x768  75Hz
hdmi_mode=25   1280x768  85Hz
hdmi_mode=26   1280x768  120Hz reduced blanking
hdmi_mode=27   1280x800        reduced blanking
hdmi_mode=28   1280x800  60Hz
hdmi_mode=29   1280x800  75Hz
hdmi_mode=30   1280x800  85Hz
hdmi_mode=31   1280x800  120Hz reduced blanking
hdmi_mode=32   1280x960  60Hz
hdmi_mode=33   1280x960  85Hz
hdmi_mode=34   1280x960  120Hz reduced blanking
hdmi_mode=35   1280x1024 60Hz
hdmi_mode=36   1280x1024 75Hz
hdmi_mode=37   1280x1024 85Hz
hdmi_mode=38   1280x1024 120Hz reduced blanking
hdmi_mode=39   1360x768  60Hz
hdmi_mode=40   1360x768  120Hz reduced blanking
hdmi_mode=41   1400x1050       reduced blanking
hdmi_mode=42   1400x1050 60Hz
hdmi_mode=43   1400x1050 75Hz
hdmi_mode=44   1400x1050 85Hz
hdmi_mode=45   1400x1050 120Hz reduced blanking
hdmi_mode=46   1440x900        reduced blanking
hdmi_mode=47   1440x900  60Hz
hdmi_mode=48   1440x900  75Hz
hdmi_mode=49   1440x900  85Hz
hdmi_mode=50   1440x900  120Hz reduced blanking
hdmi_mode=51   1600x1200 60Hz
hdmi_mode=52   1600x1200 65Hz
hdmi_mode=53   1600x1200 70Hz
hdmi_mode=54   1600x1200 75Hz
hdmi_mode=55   1600x1200 85Hz
hdmi_mode=56   1600x1200 120Hz reduced blanking
hdmi_mode=57   1680x1050       reduced blanking
hdmi_mode=58   1680x1050 60Hz
hdmi_mode=59   1680x1050 75Hz
hdmi_mode=60   1680x1050 85Hz
hdmi_mode=61   1680x1050 120Hz reduced blanking
hdmi_mode=62   1792x1344 60Hz
hdmi_mode=63   1792x1344 75Hz
hdmi_mode=64   1792x1344 120Hz reduced blanking
hdmi_mode=65   1856x1392 60Hz
hdmi_mode=66   1856x1392 75Hz
hdmi_mode=67   1856x1392 120Hz reduced blanking
hdmi_mode=68   1920x1200       reduced blanking
hdmi_mode=69   1920x1200 60Hz
hdmi_mode=70   1920x1200 75Hz
hdmi_mode=71   1920x1200 85Hz
hdmi_mode=72   1920x1200 120Hz reduced blanking
hdmi_mode=73   1920x1440 60Hz
hdmi_mode=74   1920x1440 75Hz
hdmi_mode=75   1920x1440 120Hz reduced blanking
hdmi_mode=76   2560x1600       reduced blanking
hdmi_mode=77   2560x1600 60Hz
hdmi_mode=78   2560x1600 75Hz
hdmi_mode=79   2560x1600 85Hz
hdmi_mode=80   2560x1600 120Hz reduced blanking
hdmi_mode=81   1366x768  60Hz
hdmi_mode=82   1080p     60Hz
hdmi_mode=83   1600x900        reduced blanking
hdmi_mode=84   2048x1152       reduced blanking
hdmi_mode=85   720p      60Hz
hdmi_mode=86   1366x768        reduced blanking```

|params|desc|
|-|-|
|overscan_left |左侧跳过像素数|
|overscan_right |右侧跳过像素数|
|overscan_top |顶部跳过像素数|
|overscan_bottom |底部跳过像素数|
|framebuffer_width |控制台framebuffer宽度, 以像素为单位. 默认是显示器宽度减去超出扫描.|
|framebuffer_height |控制台framebuffer高度, 以像素为单位. 默认是显示器高度减去超出扫描.|
|framebuffer_depth |控制台framebuffer深度, 以位为单位. 默认是16位. 8位也是有效的, 但是默认RGB调色板会导致屏幕不可读. 24位效果更好 ,但是2012年6月15号发现有显示混乱问题. 32位没有混乱问题, 但是需要设置framebuffer_ignore_alpha=1, 并在2012年6月15号发现颜色显示错误.|
|framebuffer_ignore_alpha |设为1将禁用alpha通道. 仅对32位有效.|
|test_mode| 允许在启动时做声音与图像测试.|
|disable_overscan |设为1将禁用超出扫描.|
|config_hdmi_boost| 设置HDMI接口的信号强度. 默认为0. 如果出现HDMI干扰问题可以试试设为4. 最大为7.|

display_rotate 顺时针旋转屏幕显示 (默认为0) 或者翻转显示.

display_rotate=0 正常
display_rotate=1 90度
display_rotate=2 180度
display_rotate=3 270度
display_rotate=0x10000 水平翻转
display_rotate=0x20000 垂直翻转

注意: 旋转90度或者270度额外需要GPU内存, 所以在GPU只分配到16M的时候旋转会无效. 可能的原因:
`Crashes my RPI before Linux boots if set to "1" -- REW 20120913.`

##哪些值对我的显示器有效?

你的HDMI显示器可能只支持一部分设置. 想要找出支持哪些设置, 可以使用下面的方法.

把输出格式设为VGA 60Hz (hdmi_group=1 hdmi_mode=1) 然后启动树莓派
输入下列命令可以获取CEA支持模式的列表
`/opt/vc/bin/tvservice -m CEA`
输入下列命令可以获取DMT支持模式的列表
`/opt/vc/bin/tvservice -m DMT`
输入下列命令可以获取当前设置状态
`/opt/vc/bin/tvservice -s`
输入下列命令可以从显示器获取更多详细信息
`/opt/vc/bin/tvservice -d edid.dat /opt/vc/bin/edidparser edid.dat`
使用默认HDMI模式去排除问题时, edid.dat文件同样会提供信息

##许可的解码器
你可以购买绑定树莓派CPU序列号的证书来使用额外的硬件解码器.

decode_MPG2 可开启MPEG-2硬解的序列号.

decode_MPG2=0x12345678
decode_WVC1 可开启VC-1硬解的序列号.

decode_WVC1=0x12345678
可在多台树莓派间共享SD卡的序列号. 同时最多8个证书.

decode_XXXX=0x12345678,0xabcdabcd,0x87654321,...

###启动
`disable_commandline_tags `在启动内核前, 通过改写ATAGS (0x100处的内存)来阻止start.elf 

`cmdline (string) `命令行参数. 可用来代替cmdline.txt文件

`kernel (string) `加载指定名称的内核镜像文件启动内核. 默认为"kernel.img"

`kernel_address `加载kernel.img文件地址

`kernel_old (bool) `为1时, 从0x0处加载内核

`ramfsfile (string) `要的加载的ramfs文件

`ramfsaddr `要加载的ramfs文件地址

`initramfs (string address) `要加载的ramfs文件及其地址 (就是把ramfsfile+ramfsaddr合并为一项). 

注意: 这项使用与其他项不同的语法 - 不要在这用"="号. 正确示例:

initramfs initramf.gz 0x00800000
device_tree_address 加载device_tree的地址
`init_uart_baud `初始化uart波特率. 默认为115200
`init_uart_clock `初始化uart时序. 默认为3000000 (3Mhz)
`init_emmc_clock `初始化emmc时序. 默认为100000000 (100MHz)
`boot_delay `在加载内核前在start.elf等待指定秒. 总延迟=`1000 * boot_delay + boot_delay_ms`. 默认为1
`boot_delay_ms `在加载内核前在start.elf等待指定毫秒. 默认为0
`avoid_safe_mode` 如果设为1, 将不以安全模式启动. 默认为0

###超频

最新的内核有一个默认开启"ondemand"调速器的cpu频率内核驱动. 未开启超频并不会有任何影响. 一旦你开超频, ARM频率将随处理器负载而变化. 只有在调速器需要时才会使用非默认值. 你可以使用*_min配置选项来调整最低值, 或者使用force_turbo=1来禁用动态超频.
当芯片温度达到85°C运行时会关闭超频及超压, 直到冷却. 即使在25°C环境温度下使用最高设置, 也不要让温度达到极限. 

####超频选项
|参数|    说明|
|-|-|
|arm_freq|  ARM频率,以MHz为单位. 默认为700|
|gpu_freq|  同时设置core_freq, h264_freq, isp_freq, v3d_freq. 默认为250|
|core_freq| GPU处理器核心频率,以MHz为单位. 由于GPU要驱动二级缓存, 对ARM性能会造成影响. 默认为 250|
|h264_freq| 视频硬解模块频率,以MHz为单位. 默认为250|
|isp_freq|  图像传感器管道模块频率,以MHz为单位. 默认为250|
|v3d_freq|  3D模块频率,以MHz为单位. 默认为250|
|avoid_pwm_pll  |不要把锁相环用在PWM音频. 这会略微降低模拟音频的效果. 空闲的锁相环允许从剩余GPU独立设置core_freq, 这将会比超频有更多权限. 默认为0|
|sdram_freq |SDRAM频率,以MHz为单位.默认为400|
|over_voltage|  ARM/GPU核心电压调节. [-16,8]用0.025V步进等同于[0.8V,1.4V]. 默认为0 (1.2V). 只有在指定 force_turbo或current_limit_override时 (会设置保修位), 才允许数值在6以上
`over_voltage_sdram 同时设置over_voltage_sdram_c, over_voltage_sdram_i, over_voltage_sdram_p`

|parmas|desc|
|-|-|
|over_voltage_sdram_c|  SDRAM控制器电压调节. [-16,8]用0.025V步进等同于[0.8V,1.4V]. 默认为0 (1.2V)
|over_voltage_sdram_i|  SDRAM I/O电压调节. [-16,8]用0.025V步进等同于[0.8V,1.4V]. 默认为0 (1.2V)
|over_voltage_sdram_p|  SDRAM phy电压调节. [-16,8]用0.025V步进等同于[0.8V,1.4V]. 默认为0 (1.2V)
|force_turbo|   关闭动态CPU频率驱动及下面的最小设置. 开启h264/v3d/isp超频. 默认为0. 会设置保修位.
|initial_turbo| 在启动时以指定秒数 (上限为60) 或者以CPU频率来开启急速模式. 如果已经超频, 能对SD卡错误问题有改善. 默认为0 .
|arm_freq_min|  设置动态时序的最小arm_freq. 默认为700
|core_freq_min| 设置动态时序的最小core_freq. 默认为250
|sdram_freq_min|    设置动态时序的最小sdram_freq. 默认为400
|over_voltage_min|  设置动态时序的最小over_voltage. 默认为0
|temp_limit |过热保护. 当芯片达到指定温度就把时序和电源切换会默认值. 把此值设高于默认值将影响保修. 默认为85
|current_limit_override|    当设为"0x5A000020"时, 禁止SMPS限流保护. 在超频过高无法重启时设置此项会有所帮助. 会设置保修位.

###force_turbo模式

`force_turbo=0`
开启对ARM核心,GPU核心和SDRAM的动态时序及电压. 在忙的时候ARM频率会提高到"arm_freq"并在闲的时候降低到"arm_freq_min". "core_freq", "sdram_freq"和"over_voltage"的行为都一样. "over_voltage"最高为6 (1.35V). h264/v3d/isp部分的非默认值将被忽略.
`force_turbo=1`
关闭动态时序, 因此所有频率和电压会保持高值. h264/v3d/isp GPU部分的超频也会开启, 等同于设置"over_voltage"为8 (1.4V).


###监测温度及电压

要检测树莓派的温度, 看: `/sys/class/thermal/thermal_zone0/temp`
要检测树莓派当前的频率, 看: `/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq`
要检测树莓派电源装置的电压, 你需要一个万用电表, 接上电源测试点, 或者扩展头.
通常来说要保持核心温度低于70度, 电压高于4.8V. (另外请注意, 不要用那种便宜的USB电源, 那基本上是4.2V的, 这是因为那本来就是为充3.7V锂电池设计的, 根本无法为树莓派提供稳定的5V电压). 此外, 用散热片也是个好主意, 尤其是你把树莓派装到了壳子里. 一个合适的散热器是自带不干胶栅格状的 14x14x10 mm 散热片.

其他不翻。

推荐阅读更多精彩内容