我的openwrt笔记

这里有很多有用的东西值得学习:http://www.wowotech.net

//———————————————-
//********置顶********
//下文中“/”,“\”等于LS360F_openwrt_sdk/openwrt/
//———————————————-
编译apps包:在openwrt/openwrt目录下执行 make package/apps/compile V=s -j1
编译kernel:在openwrt/owl目录下make kernel
编译uboot:在openwrt/owl目录下make uboot
编译输出:openwrt\openwrt\staging_dir\target-arm-openwrt-linux-uclibcgnueabi\root-ats3605

配置kernel:kernel下的只需要手动配置arch/arm/configs下的ats3605_zxf86_defconfig
配置linux:在openwrt/owl目录下make openwrt-config

一、选择板型,/owl目录下执行config.sh选择板型后会执行以下操作:
1、选择板型后会把选中板型目录下的config文件复制到/owl目录下重命名为.config供后续编译使用。
例如:/owl/ats3605/boards/openwrt/ls360f_zxf83/config文件拷贝到/owl目录下(添加板型时需要修改板型目录下的config文件)

2、/owl/.config配置文件添加IC,系统,板型名字
……
IC_NAME=ats3605
OS_NAME=openwrt
BOARD_NAME=ls360f_zxf86

二、在/owl目录下make kernel/make uboot/make的时候会包含/owl/.config配置文件。

三、在/kernel目录make mrproper会删除所有生成的文件包括.config。

//———————————————-
2017-12-26
//———————————————-
四、内核makefile解析
1、# Use ‘make V=1’ to see the full commands
2、# Use ‘make C=1’ to enable checking of only re-compiled files.

// Use ‘make C=2’ to enable checking of all source files, regardless
// of whether they are re-compiled or not.

3、ifeq (“$(origin M)”, “command line”)//判断变量M是否来自于命令行参数。
4、# Use “make O=dir/to/store/output/files/”把输出文件保存到其他目录下

五、调试串口修改
注意:不是dtsi文件中所有的节点都会被注册,在注册总线和设备时,会对dts节点的状态作一个判断,
如果节点里面的status属性没有被定义,或者status属性被定义了并且值被设为“ok”或者“okay”,其他情况则不被注册到系统中。

1、实例分析:设置uart1的功能复用pin脚。
struct ats3605_pinctrl_info
{
.functions = ats3605_functions
{
[OWL_MUX_UART1] = FUNCTION(uart1)//uart1在ats3605_pincrtl.dtsi中serial_1节点给出
{
.name = uart1
.groups = uart1_groups
}
},

.groups = ats3605_groups
{
//MUX_PG(group_name, mfpctl_regn, mfpctl_sft, mfpctl_w)
MUX_PG(mfp3_5_3, 3, 3, 3)//mfp3_5_3在ats3605_pincrtl.dtsi中serial_1节点给出
{ \
.name = mfp3_5_3,
.pads = owl_mfp3_5_3_pads,//这个在pinctrl-ats3605.c里面有定义,但好像程序没有调用
.funcs = owl_mfp3_5_3_funcs,//这个在pinctrl-ats3605.c里面有定义,但好像程序没有调用
.mfpctl_reg = MFP_CTL3,
.mfpctl_shift = 3,//应该是对应要操作的寄存器的起始位,bit 3开始结合下面的width得出最终要操作的寄存器相应的bit这里是MFP_CTL3[5:3]。
.mfpctl_width = 3,//要写的寄存器位数宽度,实际使用可能是二进制1的个数,比如0111b,即0x7<<3 == MFP_CTL3[5:3]。
.paddrv_reg = -1,
}
},
}

2、pinctl设备驱动初始化
ats3605_pinctrl_init(void)
{
platform_driver_register(&ats3605_pinctrl_driver);//为pinctrl设备注册一个驱动(register a driver for platform-level devices)
{
……
drv = &ats3605_pinctrl_driver;

drv->driver.bus = &platform_bus_type;
{
.match = platform_match,
platform_match(struct device *dev, struct device_driver *drv)
{
struct platform_device *pdev = to_platform_device(dev);
struct platform_driver *pdrv = to_platform_driver(drv);

/* Attempt an OF style match first */
if (of_driver_match_device(dev, drv))//检查驱动的of_match_table是否匹配device.//将会和ats3605_pincrtl.dtsi中的compatible属性匹配
return 1;

/* Then try ACPI style match */
if (acpi_driver_match_device(dev, drv))
return 1;

/* Then try to match against the id table */
if (pdrv->id_table)
return platform_match_id(pdrv->id_table, pdev) != NULL;

/* fall-back to driver name match */
return (strcmp(pdev->name, drv->name) == 0);
}
}

return driver_register(&drv->driver);//注册驱动
{
……
other = driver_find(drv->name, drv->bus);//扫描drv->bus总线上是否已经存在drv->name驱动
//如果drv->bus上不存在drv->name驱动则继续执行以下流程
ret = bus_add_driver(drv);//把驱动drv->name注册到drv->bus
……
}
}

展开 ats3605_pinctrl_driver//pinctrl驱动结构体
{
.probe = ats3605_pinctrl_probe,//pinctrl初始化
{
owl_pinctrl_probe(pdev, &ats3605_pinctrl_info)
{
……
owl_pinctrl_desc.name = dev_name(&pdev->dev);//把pin controller设备名给pinctrl描述文件
owl_pinctrl_desc.pins = info->pins;//把ats3605_pads[]pins给pinctrl描述文件,注册pins用到。
owl_pinctrl_desc.npins = info->npins;

apctl->pctl = pinctrl_register(&owl_pinctrl_desc, &pdev->dev, apctl);//注册一个pin controller设备
{
pinctrl_check_ops(pctldev);//检查owl_pinctrl_desc带入的操作函数接口是否有效
pinmux_check_ops(pctldev);//检查owl_pinctrl_desc带入的操作函数接口是否有效
pinconf_check_ops(pctldev);//检查owl_pinctrl_desc带入的操作函数接口是否有效

pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins);//注册pctldesc->pins=ats3605_pads对应所有的pins
}
……
pinctrl_add_gpio_range(apctl->pctl, &info->gpio_ranges[i]);//注册pin controller设备可操作的gpio范围
platform_set_drvdata(pdev, apctl);//设置驱动数据
}
}
.remove = ats3605_pinctrl_remove,
.driver =
{
.name = “pinctrl-ats3605”,//设备驱动的名称
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(ats3605_pinctrl_of_match),//The open firmware table.
{
.compatible = “actions,ats3605-pinctrl”,//将会和ats3605_pincrtl.dtsi中的compatible属性匹配
}
},
}
}
ats3605_pinctrl_probe()
{
owl_pinctrl_probe(pdev, &ats3605_pinctrl_info)
{
apctl->info = &ats3605_pinctrl_info
apctl->pctl = pinctrl_register(&owl_pinctrl_desc, &pdev->dev, apctl)//注册一个pin controller 设备
{

}
}
}

//———————————————-
2017-12-29
//———————————————-
六、
1、在当前目录和所有子目录下所有文件里全字匹配地查找内容”bootmode”:grep “bootmode” -rwn *
2、openwrt\u-boot\include\configs\ls360f_zxf86.h去掉CONFIG_HARD_POWERKEY定义,就不检查是否进入充电了
3、根文件系统,编译目标输出路径:\openwrt\openwrt\staging_dir\target-arm-openwrt-linux-uclibcgnueabi\root-ats3605\usr\bin

//———————————————-
2018-01-03
//———————————————-
七、TP驱动调试
1、openwrt\kernel\drivers\input\touchscreen目录下增加ft6x36目录。
2、修改touchscreen目录下的makefile,增加obj-$(CONFIG_TOUCHSCREEN_FT6X36) += ft6x36/。
3、修改touchscreen目录下的Kconfig,增加config TOUCHSCREEN_FT6X36。
4、在openwrt/owl/目录下make kernel-config配置内核选择上面添加的TP驱动;将会在owl/out/ats3605_openwrt_ls360f_zxf86/kernel目录下产生.config内核配置文件(但是make kernel后.config文件又变回旧的文件了???)。
5、

//———————————————-
2018-01-04
//———————————————-
八、添加launcher应用
1、修改\openwrt\package\story_machine\apps\src\target.conf
添加subdirs-y+=launcher
2、\openwrt\package\story_machine\apps\resource目录下增加launcher目录存放ui-editor生成的资源文件

//———————————————-
2018-01-09
2018-01-10
//———————————————-
九、添加music,music_online,setting等应用
1、修改\openwrt\package\story_machine\apps\src\target.conf
subdirs-y+=music
subdirs-y+=music_online
subdirs-y+=setting

2、\openwrt\package\story_machine\apps\resource目录下增加music,music_online,setting目录存放ui-editor生成的资源文件
3、编译出错。。。(target.conf NUL character之类的,是因为target.conf文件编码变了)
4、music、music_online音频输出的中间件没有相关代码已经暂时屏蔽。-laudio_service_api -lsound库已去掉。
5、service宏定义TP_SUPPORT=1在这里定义为0或者1:\openwrt\package\story_machine\services\src\msg_server\makefileAPP
6、需要编译的service plugin在这里定义:\openwrt\package\story_machine\services\src\msg_server\target.conf
7、headbar中获取电池电压,RTC时间的函数暂时屏蔽。
8、应用参考:\openwrt\package\actions\instance这个下面有一些基本的应用及库,有需要什么,可以多翻翻这里面的代码。/openwrt下make menuconfig可以配置哪些需要打包编译。
9、

//———————————————-
2018-01-11
//———————————————-
十、TP驱动调试,驱动芯片FT6336G,屏分辨率320x240
1、修改dts,在I2C1设备节点下添加节点
2、增加驱动,在ft5x06基础上稍作修改
3、修改kernel/arch/arm/configs/*.deconfig配置文件

//——————————————————————————-

未完待续。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值