您尚未登录。

#1 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 学习的意义??? » 2020-06-08 10:20:59

这可能不是学习意义,而是不甘。那么又如何?干就完了。计划有偏差就止损...迷茫、思考、寻找本身就一直存在..再说了奶头乐不香吗~

#2 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » linux4.2.6 设备树 驱动 视频免费分享 » 2020-05-29 09:36:58

哇酷小二 说:

可以, 加我微信 whycan_cn

我拉你进去, 群主是楼主.

哇咔咔,晕哥,群主是你了,记得逢年过节发红包。

#3 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » linux4.2.6 设备树 驱动 视频免费分享 » 2020-03-14 11:09:40

二维码过期,大家可以加我微信备注,我拉你们进群。也可以找晕哥哈。
FluxBB bbcode 测试

#4 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » linux4.2.6 设备树 驱动 视频免费分享 » 2020-03-14 11:02:28

飞翔工控 说:

挺好的教程, 就是声音外放有点小,得用耳机.

看来是时候换个低音炮,嗨起来了。

#5 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » linux4.2.6 设备树 驱动 视频免费分享 » 2020-03-14 10:59:59

zzm24 说:

大神是不是最后要写一个用dtb启动linux的bootloader总结一下

我能想到的是,do_bootm_linux的时候会设置三个寄存器,R0,R1,R2。我们经常关系的是R1,机器ID是否匹配,因为他导致内核启动失败。
当用上设备树来启动意味着需要正确的设备描述才能去启动,那么就要开始关系R2。是的,R2用来传递DTB的开始地址(以前是参数,当然现在也需要,只不过以DTB的形式传入了)
最终uboot会携带这些信息,目标内核。突突突~

接下来就是内核的事情,再arm相关的head.S会校验,然后再setup_arch会去解析和处理。解析节点,节点的描述(内存,IO口等等)
然后然后看视频哈~我编不下去了....太难了。只记得这些片段..

#6 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » linux4.2.6 设备树 驱动 视频免费分享 » 2020-03-07 11:23:52

Morgan
回复: 24

今年的疫情让人可以停下来安静下来,去回忆去思考。不经意的想起了15年在培训学院离职后想通过录制视频的方式来赚点小钱。
最终却没能坚持下去,坚持很重要,不管是什么,指不定是另外一番风情了。O(∩_∩)O哈哈~
幸运的是这部分视频并没有因为换了好几个电脑而被删除,而是在网盘里面找到了
一直在享受别人的分享,那么这次刚好是一个分享的好机会。另外创建了一个群,群公告就是视频链接地址,大家也可以在上面交流。群在最后面,我希望大家看完描述在决定是否进入。免费的东西都不会有人珍惜,与其浪费表情不如看完我下面的介绍在决定吧…


1.视频最开始利用思维导图来介绍整个课程(很遗憾没有全部录完,但我个人觉得够了),让大家了解这系列的课程,并且能在这系列课程里面学到什么。
2.介绍设备树的引入,为什么要引入,引入有什么好处?其实可以看我之前的文章。哈哈哈…也是很老的文章了。链接地址在此:
https://blog.csdn.net/Lidroid/article/details/50165895
3.设备树在boot和内核之间是如何传递使用的,也就是怎么让uboot直接设备树,内核如何拿到设备树的信息等。
4.简单介绍了buildroot怎么去制作交叉编译器
5.介绍了buildroot怎么去生成根文件系统
前面其实都是围绕着环境如何去搭建,工欲善其事必先利其器。只有跨过这一步才能开始真正的学习,一名只看代码的逻辑的工程师是不会懂一名不知道为什么就调试好问题的工程师幸福感强。(瞎扯中…)

6.边看代码边讲课,那个时候慌得很,好像录了好几次吧。总之就是那个时候最好的呈现了或者现在看起来很一般。不过对于入门的来说还是可以的,高手就多多包涵。
7.通过分析平台设备,了解设备树是怎么被最终你想要编写的驱动程序识别到的。比如最简单的io驱动。
8.最后虽然只录到了LED驱动就没有在录下去,但是dtb从uboot传递到内核最终到驱动是如何去实现的都有了。剩下只是去完善后面的课程,可以去看书可以去买其他大牛的视频。但是最终只有自己动手去做了才是真的。

下面是课程列表咯。
lesson1_前言
lesson2_复习tiny4412环境搭建
lesson3.1_设备树简介之设备树的引入
lesson3.2_设备树简介之dts组成和结构
lesson4.1_使用dtb启动Linux4.2.6内核之uboot支持dtb
lesson4.2_使用dtb启动Linux4.2.6内核之使用buildroot制作交叉编译器
lesson4.3_使用dtb启动Linux4.2.6内核
lesson5.1_实现挂载网络根文件系统之如何配置nfs服务器和客户端
lesson5.2_实现挂载网络根文件系统之使用buildroot制作根文件系统
lesson5.3_实现挂载网络根文件系
lesson6.1_设备树详解之dtb组成和结构
lesson6.2_设备树详解之dtb解析
lesson6.3.1_dtb如何转化为平台设备之前言介绍
lesson6.3.2_dtb如何转化为平台设备之识别机器、获取启动参数
lesson6.3.3_dtb如何转化为平台设备之构造device_node全局链表(1)
lesson6.3.3_dtb如何转化为平台设备之构造device_node全局链表(2)
lesson6.3.3_dtb如何转化为平台设备之构造device_node全局链表(3)
lesson6.3.4_dtb如何转化为平台设备之devicce_node注册成平台设备lesson7.1_led驱动之硬件接口
lesson7.2_led驱动之设备树驱动编写
lesson7.3.1_led驱动之reg和自定义属性
lesson7.3.2_led驱动之ioremap方式控制led亮灭

FluxBB bbcode 测试
FluxBB bbcode 测试

#8 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 试看看爆照 » 2019-08-27 11:51:14

终于记起来账号和密码了。
太久没撸代码,眼神不好,看成了果照,小姐姐身材真棒。没别的意思就是上来看能不能交个朋友,跟着学stm32.

#10 Re: 全志 SOC » adbd启动提示:Address family not supported by protocol » 2018-12-17 09:11:05

晕哥 说:
Morgan 说:
晕哥 说:

这有点尴尬了

懵逼!!!
不小心切换到虚拟机的Ubuntu自动挂载失败设备,直接成功adb控制板子~

但是在win7+usb3.0的 PC 上一直都是不停open和release adb_bind.......这又是什么坑!!!

咦,bsp linux的adb不是本来就没有问题吗,请问你是怎么折腾的?


搞定,PC端USB3.0的驱动问题,重新安装USB3.0总线驱动,在重新安装自己ADB的驱动就好了。

#11 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-14 14:41:21

晕哥 说:
Morgan 说:
小猪佩奇 说:

确实差得远。。。十分钟内能差两分钟,我得看看晶振了。。

额~自从改好后我就没看过时间,时间是否准不准~~那么接下来我就流下默然的泪水~(十分钟二分钟!!!)

那现在方便看下吗, 看能不能再燃起我用内置 RTC 的欲望。



我想你可以使用内部的RTC了,不过就如上面说的,需要去对比BSP和主线的RTC驱动。
现在测试的时间和我PC的时间一样,我应该是放了两天~
# hwclock
Fri Dec 14 14:43:32 2018  0.000000 seconds

#12 Re: 全志 SOC » adbd启动提示:Address family not supported by protocol » 2018-12-13 17:45:57

晕哥 说:

这有点尴尬了

懵逼!!!
不小心切换到虚拟机的Ubuntu自动挂载失败设备,直接成功adb控制板子~

但是在win7+usb3.0的 PC 上一直都是不停open和release adb_bind.......这又是什么坑!!!

#13 Re: 全志 SOC » adbd启动提示:Address family not supported by protocol » 2018-12-12 14:44:32

进入抽疯状态,关闭杀毒和其他的手机关机软件还是一样,哔哔哔哔~~~
[  876.404828] adb_open
[  876.407415] adb_bind_config
[  876.410635] ep_matches, wrn: endpoint already claimed, ep(0xc0436f2c, 0xc29a26c0, ep1in-bulk)
[  878.294730] android_usb gadget: high-speed config #1: android
[  878.341049] adb_release
[  878.345114] adb_open
[  878.347630] adb_bind_config
[  878.350920] ep_matches, wrn: endpoint already claimed, ep(0xc0436f2c, 0xc29a26c0, ep1in-bulk)
[  878.907233] android_usb gadget: high-speed config #1: android
[  878.968664] adb_release
[  878.972776] adb_open
[  878.975291] adb_bind_config
[  878.978545] ep_matches, wrn: endpoint already claimed, ep(0xc0436f2c, 0xc29a26c0, ep1in-bulk)
[  879.490198] android_usb gadget: high-speed config #1: android
[  879.535008] adb_release
[  879.539066] adb_open
[  879.541708] adb_bind_config
[  879.544969] ep_matches, wrn: endpoint already claimed, ep(0xc0436f2c, 0xc29a26c0, ep1in-bulk)
[  880.134987] android_usb gadget: high-speed config #1: android
[  880.180855] adb_release
[  880.184914] adb_open
[  880.187431] adb_bind_config
[  880.190651] ep_matches, wrn: endpoint already claimed, ep(0xc0436f2c, 0xc29a26c0, ep1in-bulk)

#14 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-12 14:37:52

lilo 说:

官方BSP还有什么问题?主线很多外设不支持,我都打算用官方bsp,小白请教有哪些坑?

我的是自己挖的坑,用官方的BSP去做相对应的产品还是很快的~

#15 Re: 全志 SOC » adbd启动提示:Address family not supported by protocol » 2018-12-12 14:24:05

晕哥 说:

可能是这个选项相关:

#
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_DIAG is not set
CONFIG_UNIX=y
# CONFIG_UNIX_DIAG is not set
# CONFIG_TLS is not set
# CONFIG_XFRM_USER is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set

nice啊~之前为了裁剪砍掉了net所有的东西~
只要配置上面的加上因为配置需要其他模块的IPV4和IPV6现在没有报错了。

# adbd
install_listener('tcp:5037','*sm[  138.089612] adb_open
artsocket*')

接下来看看正常的adb能不能用起来了,保佑我~~

#16 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-12 14:20:53

lilo 说:
Morgan 说:
lilo 说:

请教用什么命令测试的?具体命令行是什么?
date ? hwclock ?


hwclock

这样啊, 大神你用的是官方bsp吧?主线的确实有问题,改天对比一下看什么问题引起

我用官方的BSP的,主线我还没有用上。官方的BSP搞得都吐血。┭┮﹏┭┮

#17 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-12 14:09:50

lilo 说:
Morgan 说:
晕哥 说:

那现在方便看下吗, 看能不能再燃起我用内置 RTC 的欲望。


我测试了三次:
1. 5分钟
2. 10分钟
3. 一个小时
三次中我看到的时间和我电脑的时间是一致的,也就是说即使存在误差,那么在我测试的一小时内它的误差最多就是一分钟。

请教用什么命令测试的?具体命令行是什么?
date ? hwclock ?


hwclock

#18 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-12 13:42:03

小猪佩奇 说:

原理图设计有36.768k无源晶振,有纽扣电池。
用BSP内核,时间可以保存但是掉电不计时。
求解答

menuconfig选择如下

Set system time from RTC on startup and resume                                                                                 
(rtc0)  RTC used to set the system time                                                                                             
                                                                                                       
*** RTC interfaces ***                                                                                                         
/sys/class/rtc/rtcN (sysfs)                                                                                       
  /dev/rtcN (character devices)   
<*>   sunxi rtc driver



看到开始的设计~~不应该是32.768Khz的晶振么~

#19 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-12 13:40:37

晕哥 说:
Morgan 说:
小猪佩奇 说:

确实差得远。。。十分钟内能差两分钟,我得看看晶振了。。

额~自从改好后我就没看过时间,时间是否准不准~~那么接下来我就流下默然的泪水~(十分钟二分钟!!!)

那现在方便看下吗, 看能不能再燃起我用内置 RTC 的欲望。


我测试了三次:
1. 5分钟
2. 10分钟
3. 一个小时
三次中我看到的时间和我电脑的时间是一致的,也就是说即使存在误差,那么在我测试的一小时内它的误差最多就是一分钟。

#20 全志 SOC » adbd启动提示:Address family not supported by protocol » 2018-12-12 11:14:32

Morgan
回复: 10

在使用adb的过程中,在linux内核我已经配置好了adb的驱动,并且在buildroot配置选中了android tools-->adbd。
在把编译好的系统烧写到板子上去,企图启动adbd,提示下面的错误:
# adbd
error: Address family not supported by protocol: cannot open transport registration socketpair

然而我在网上搜索此类的问题,得到的解决方法都是关闭防火墙在重新启动就好了。
让我郁闷的是我没有防火墙,只能跑来求助~~请问各位大神有遇到这样的情况么。

#21 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-10 17:32:48

小猪佩奇 说:
晕哥 说:

貌似主线也有这种问题, 而且时间还不准,差很远,后来干脆用PCF8563

确实差得远。。。十分钟内能差两分钟,我得看看晶振了。。

额~自从改好后我就没看过时间,时间是否准不准~~那么接下来我就流下默然的泪水~(十分钟二分钟!!!)

#23 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-08 12:02:48

刚才想到,在V3S钟是有内部晶振,记得第一次都会先使用内部晶振去初始化RTC然后才切换到外部。可以尝试修改驱动直接使用外部晶振,我记得我就是这样解决的~~

#24 Re: 全志 SOC » V3S内置RTC掉电保存但是不计时 » 2018-12-08 11:50:57

在确保电池有点的情况下,这个问题基本上和晶振有关系的。你看看你外部晶振能起震不。

#26 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » tiny4412 lcd驱动移植 » 2018-07-08 18:49:14

Morgan
回复: 3

前言
在移植LCD驱动,当然得找到LCD驱动的驱动端了,根据以前了解的很快就能找到下面的配置:

Device Drivers  --->
	Graphics support  --->
		 Frame buffer Devices  --->
		 	<*> Samsung S3C framebuffer support  //在配置上还是有这个,那样只要把设备端配置好就行
 [*] Bootup logo  --->	

但是接下来,并不以这个来移植LCD驱动程序。居然用了设备树,那么就用内核自带的设备树来做,所以才有下面的LCD驱动移植。

1、使用新的LCD驱动
新的LCD驱动文件在:linux-4.2.6\drivers\gpu\drm\exynos\exynos_drm_fimd.c
1.1 配置支持新的LCD驱动
其中exynos_drm_dpi.c的函数会被exynos_drm_fimd.c中调用,配置下面两个文件

exynosdrm-$(CONFIG_DRM_EXYNOS_FIMD)	+= exynos_drm_fimd.o
exynosdrm-$(CONFIG_DRM_EXYNOS_DPI)	+= exynos_drm_dpi.o

1.2 配置

Device Drivers  ---> 
	Graphics support  --->
		Direct Rendering Manager  ---> 
			<*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  ---> 
				[*]     Exynos DRM FIMD
 				[*]     EXYNOS DRM parallel output support

2、使用设备树描述LCD设备
2.1 FIMD的SoC配置
在arch/arm/boot/dts/exynos4.dtsi 已经帮咱们定义好了fimd的信息,这个fimd信息是属于SoC级别的定义,可以参考:linux-4.2.6\documentation\devicetree\bindings\video\samsung-fimd.txt

fimd: fimd@11c00000 {
		compatible = "samsung,exynos4210-fimd";
		interrupt-parent = <&combiner>;
		reg = <0x11c00000 0x20000>;
		interrupt-names = "fifo", "vsync", "lcd_sys";
		interrupts = <11 0>, <11 1>, <11 2>;
		clocks = <&clock CLK_SCLK_FIMD0>, <&clock CLK_FIMD0>;
		clock-names = "sclk_fimd", "fimd";
		power-domains = <&pd_lcd0>;
		iommus = <&sysmmu_fimd0>;
		samsung,sysreg = <&sys_reg>;
		status = "disabled"; 
	};

2.2 FIMD的Board配置

&fimd {
		pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
		pinctrl-names = "default";
		samsung,invert-vclk;     //vclk翻转
		status = "okay";
	};

2.3 LCD时序配置
此配置可以参考:linux-4.2.6\documentation\devicetree\bindings\video\display-timing.txt

display-timings {
		native-mode = <&timing0>;
		timing0: timing {
		  pixelclk-active = <1>;
			clock-frequency = <33000000>;
			hactive = <800>;
			vactive = <480>;
			hfront-porch = <80>;
			hback-porch = <36>;
			hsync-len = <10>;
			vback-porch = <15>;
			vfront-porch = <1>;
			vsync-len = <8>;
		};
	};

4、编译烧写,把dtb放入bootloader
启动信息如下:

[    1.475756] [drm] Initialized drm 1.1.0 20060810
[    1.481573] exynos-drm exynos-drm: bound 11c00000.fimd (ops fimd_component_ops)
[    1.486849] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    1.493444] [drm] No driver support for vblank timestamp query.
[    1.499351] [drm] Initialized exynos 1.0.0 20110530 on minor 0

启动后,并没有/dev/fb0设备出现,那么就加打印咯,当然也可以使用KDB来调试,可以参考个人博客。不过KDB调试会导致CPU过热,最终程序不是跑飞就是不断重启,非常郁闷的。
经过加打印信息,终于找到原来问题时解析不了dts中的display_timings这个属性,原来在解析的过程中,代码是按照display_timings是从属于fimd的一个节点解析的,而不是display_timings就是root下的一个节点来解析。那么就好办了,直接把display_timings添加到fimd进去,如下:(文档和例子都是坑)

&fimd {
		pinctrl-0 = <&lcd_clk &lcd_data24 &pwm1_out>;
		pinctrl-names = "default";
		samsung,invert-vclk;
		status = "okay";
		display-timings {
		native-mode = <&timing0>;
		timing0: timing {
		  pixelclk-active = <1>;
			clock-frequency = <33000000>;
			hactive = <800>;
			vactive = <480>;
			hfront-porch = <80>;
			hback-porch = <36>;
			hsync-len = <10>;
			vback-porch = <15>;
			vfront-porch = <1>;
			vsync-len = <8>;
		};
	};
};

5 重新编译设备树
重新启动启动信息如下:

[    1.469053] [drm] Initialized drm 1.1.0 20060810
[    1.473455] drivers/gpu/drm/exynos/exynos_drm_fimd.c fimd_probe 999
[    1.479165] lcd_clk = 1500000  添加的打印信息
[    1.561894] exynos-drm exynos-drm: bound 11c00000.fimd (ops fimd_component_ops)
[    1.569049] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    1.575641] [drm] No driver support for vblank timestamp query.
[    1.591038] Console: switching to colour frame buffer device 114x34
[    1.595286] exynos-drm exynos-drm: fb0:  frame buffer device  (看到这一句就表示创建出fb0了)
[    1.595342] exynos-drm exynos-drm: registered panic notifier
[    1.614515] [drm] Initialized exynos 1.0.0 20110530 on minor 0
....  //中间省略
Myroot /# cat /sys/class/graphics/fb0/virtual_size
800,480  //打印出来的信息对应hactive = <800>;vactive = <480>;也就是说设置成功了。

虽然能看到/dev/fb0了,但是屏幕背光不亮,没图像。而且在调试的过程中本人在代码里面添加了输出LCD时钟频率的大小。从上面启动信息看出来了,LCD的频率才1.5Mhz。看来还得慢慢的分析代码,调试咯。路漫漫代码挖坑给吾跳。

6. 升频和背光支持
6.1 升频
6.1.1 S70的频率
Tiny4412开发板接的LCD为群创的7寸屏,器芯片手册给了支持频率的范围,如下图
    FluxBB
6.1.1 sclk_fimd0升频到800Mhz
想要升频,就必须去看Linux内核中与Clock相关的代码,不过也是可以通过常用的Clock提供的API去升频。
根据S70的时钟范围,至少也得升频到50Mhz,通过看exynos4412的芯片手册,可以知道sclk_fimd0可以从mpll时钟过来,也就是说可以设置为800Mhz。
自从Linx3.7内核提供完善CCF开始,现在的Clock使用的是CCF框架的,但是各种时钟还是使用表格的方式在填充的。那么就能在这些表格中找到SCLK_FIMD0的父时钟在进行设置即可,过程就不多说了,直接看代码。代码添加到linux4.2.6/drivers/clk/samsung/clk-exynos4.c文件:

	
static void __init exynos4_clk_init(struct device_node *np,enum exynos4_soc soc)
    {
    struct clk *mout_mpll_user_t 	= NULL;
	struct clk *mount_fimd0 	= NULL;
	struct clk *sclk_fimd0  	= NULL;    
    .....
    /* Frequency up to 800Mhz */
	/* code start... */
    	pr_info("%s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
	mout_mpll_user_t = __clk_lookup("mout_mpll_user_t");
	if (IS_ERR(mout_mpll_user_t)) {
		pr_info("failed to get mout_mpll_user_t clock\n");
		return;
	}
	pr_info("%s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
	mount_fimd0 = __clk_lookup("mout_fimd0");
	if (IS_ERR(mount_fimd0)) {
		pr_info("failed to get mout_fimd0 clock\n");
		return ;
	}
	pr_info("%s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
	sclk_fimd0 = __clk_lookup("sclk_fimd0");
	if (IS_ERR(sclk_fimd0)) {
		pr_info("failed to get sclk_fimd0 clock\n");
		return ;
	}
	clk_set_parent(mount_fimd0,mout_mpll_user_t);
	
	ret = clk_set_rate(mount_fimd0,800000000);
	if(ret){
		pr_info("failed to clock set rate\n");	
		return ;
	}
	pr_info("%s %s %d\n",__FILE__,__FUNCTION__,__LINE__);
	ret = clk_set_rate(sclk_fimd0,800000000);
	if(ret){
		pr_info("failed to clock set rate\n");	
		return ;
	}

	pr_info("mout_mpll_user_t = %ld mount_fimd0 = %ld sclk_fimd0 = %ld\n",clk_get_rate(mout_mpll_user_t),clk_get_rate(mount_fimd0),clk_get_rate(sclk_fimd0));
	 /* code end... */
}

编译,重新启动,板子信息如下:

[    1.605811] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    1.612402] [drm] No driver support for vblank timestamp query.
[    1.622973] lcd_clk = 800000000     //成功升频到800Mhz
[    1.627903] Console: switching to colour frame buffer device 114x34
[    1.659366] exynos-drm exynos-drm: fb0:  frame buffer device
[    1.665007] exynos-drm exynos-drm: registered panic notifier
[    1.684532] [drm] Initialized exynos 1.0.0 20110530 on minor 0

6.2 背光
FluxBB
VLED+和VLED-就是LCD的背光,但是这两个脚由BL_EN和LEDDM控制,挺简单的不就看下RT9293B芯片如何控制就好了。但是Tiny4412开发板就不这样,看下BL_EN接到哪里去?
FluxBB

一看真™的恶心,想要背光亮还得去控制STC这个芯片,怎么控制?通过EINT10去控制,EIN10是exynos4412的外部中断10(GPX1_2)。更重要的是使用了一根线来发送数据,就像单总线的18B20温度传感器一样,那么这个时序也可以去看代码,分析然后在自己编写,但是本人完全不想去了解这种自定义的单总线的时序,所以直接移植,懒得看了。(真™的恶心)。
那么参考厂家给的Linux3.5的内核中的tiny4412_1wire_host.,将其移植Linx4.2.6内核中了,当然肯定是以支持设备树的方式来移植的。直接看代码(F:\share\devtree_drv\3th_backlight\1th\backlight_drv.c)
好了,背光和升频都整好了。

7. 把背光驱动安装到内核,启动内核
成功启动内核,并且可以看到四只可爱的小企鹅,不过小企鹅身上有一个一个的小黑点,刷上一张图片看更明显。这是因为,LCD取数据的边沿弄错了,很简单,翻转下LCD的时钟就行了。
完美的dts配置如下:

&fimd {
	pinctrl-0 = <&lcd_clk &lcd_data24>;
	pinctrl-names = "default";
	status = "okay";
	samsung,invert-vclk;   //翻转
	display-timings {
		native-mode = <&timing0>;
		timing0: timing {
			hsync-active = <1>;   //行同步信号开始位高
			vsync-active = <1>;
			de-active = <0>;									
			clock-frequency = <33000000>;
			hactive = <800>;
			vactive = <480>;
			hfront-porch = <80>;
			hback-porch = <36>;
			hsync-len = <10>;
			vback-porch = <15>;
			vfront-porch = <1>;
			vsync-len = <8>;
		};
	};
};

#27 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » KDB调试Linux4.2.6内核过程记录 » 2018-07-08 17:49:12

Morgan
回复: 1

KDB调试内核代码步骤记录:

一、配置内核,内核版本为Linux4.2.6

Kernel hacking  --->

printk and dmesg options  --->

[*] Show timing information on printks

(4) Default message log level (1-7)

[ ] Delay each boot printk message by N milliseconds

[*] Enable dynamic printk() support

[*] KGDB: kernel debugger  --->

<*>   KGDB: use kgdb over the serial console

[*]   KGDB_KDB: include kdb frontend for kgdb

(0x1)   KDB: Select kdb command functions to be enabled by default

[*]     KGDB_KDB: keyboard as input device

(0)     KDB: continue after catastrophic errors

二、重新编译内核烧写到开发板,并且配置其u-boot参数,在bootargs设置中加上“kgdboc=ttySAC0,115200 kgdbwait kgdbcon”

三、启动系统,最终内核会显示到下面过

[    0.206841] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled

[    0.208123] 13800000.serial: ttySAC0 at MMIO 0x13800000 (irq = 46, base_baud = 0) is a S3C6400/10

[    0.834111] console [ttySAC0] enabled

[    0.838058] 13810000.serial: ttySAC1 at MMIO 0x13810000 (irq = 47, base_baud = 0) is a S3C6400/10

[    0.846849] 13820000.serial: ttySAC2 at MMIO 0x13820000 (irq = 48, base_baud = 0) is a S3C6400/10

[    0.855689] 13830000.serial: ttySAC3 at MMIO 0x13830000 (irq = 49, base_baud = 0) is a S3C6400/10

[    0.864861] KGDB: Registered I/O driver kgdboc

[    0.906749] KGDB: Waiting for connection from remote gdb...

Entering kdb (current=0xee878000, pid 1) on processor 1 due to Keyboard Entry

[1]kdb> 

 

四、接下来就可以来调试内核了,不过在调试内核之前有两种方式,一种直接使用kdb来调试,一种使用gdb调试vmlinux文件。

第一种方式也就是上面连接成功后直接使用kdb的命令来设置断点,调试。



第二种方式首先也是需要板子启动到KGDB: Waiting for connection from remote gdb...这里来,只不过下面可以使用ubuntu来中来调试。具体步骤如下:

1、首先确认进入到KGDB: Waiting for connection from remote gdb...

2、断开串口,把开发板的串口链接到ubuntu上,链接上来的串口显示/dev/ttyUSB0

(NOTE:也有人直接在ubuntu下开启minicon来显示开发板信息,也一样需要断开,不然会冲突,后面去target remote /dev/ttyUSB0的时候会打印“Ignoring packet error, continuing...”)

3、在Linux源码目录下,先使用arm-linux-gdb vmlinux。接着使用target remote /dev/ttyUSB0

最后就开始各种设置断电,各种单步调试了。如下:

root@ubuntu:/work/a9_board/tiny4412/linux_for_dts/linux-4.2.6# /work/a9_board/tiny4412/buildroot-2015.08/output/host/usr/bin/arm-linux-gdb vmlinux

GNU gdb (GDB) 7.8.2

Copyright (C) 2014 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-buildroot-linux-uclibcgnueabi".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>.

Find the GDB manual and other documentation resources online at:

<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from vmlinux...done.

(gdb) target remote /dev/ttyUSB0

Remote debugging using /dev/ttyUSB0

0xc008fdc0 in arch_kgdb_breakpoint () at ./arch/arm/include/asm/outercache.h:142

142 outer_cache.sync();

(gdb) b usb4604_init

Breakpoint 1 at 0xc0383608: file drivers/usb/host/ehci-exynos.c, line 145.

(gdb) c

Continuing.

[   38.339126] KGDB: kernel/debug/debug_core.c kgdb_register_io_module 1021...

[   38.362864] [drm] Initialized drm 1.1.0 20060810

[   38.386095] brd: module loaded

[   38.404344] loop: module loaded

[   38.417272] usbcore: registered new interface driver cdc_ether

[   38.437386] usbcore: registered new interface driver dm9601

[   38.458694] usbcore: registered new interface driver cdc_subset

[   38.480702] usbcore: registered new interface driver zaurus

[   38.501868] usbcore: registered new interface driver cdc_ncm

[   38.523123] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver

[   38.546737] ehci-exynos: EHCI EXYNOS driver

[   38.564799] drivers/usb/host/ehci-exynos.c ehci_exynos_init 369

[   38.586865] drivers/usb/host/ehci-exynos.c exynos_ehci_probe 181

[   38.607813] drivers/usb/host/ehci-exynos.c exynos_ehci_probe 186

[   38.631819] drivers/usb/host/ehci-exynos.c exynos_ehci_probe 197

[   38.653826] drivers/usb/host/ehci-exynos.c exynos_ehci_probe 202

[   38.676898] drivers/usb/host/ehci-exynos.c exynos_ehci_probe 207

 

Breakpoint 1, exynos_ehci_probe (pdev=0xee9b9400)

    at drivers/usb/host/ehci-exynos.c:208

208 usb4604_init();

(gdb) n

[   51.127535] usb4604 initialize............

212 exynos_ehci->clk = devm_clk_get(&pdev->dev, "usbhost");

(gdb) s

devm_clk_get (dev=0xee9b9410, id=0xc06ea0c0 "usbhost")

    at drivers/clk/clk-devres.c:18

18 {

(gdb) 

 

NOTE: 最不好的是在调试的过程中,时间久了会系统会自动复位,找了好久都不知道为什么。最好发现CPU温度非常高,反正只要CPU温度正常KDB怎么调试都行。一旦温度升高到一定程度就自动复位了,使用的板子是TINY4412的开发板。

#28 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » gitosis搭建本地git服务器 » 2018-07-08 17:33:27

Morgan
回复: 1

Git是非常著名的分布式版本控制系统。很多情况下只会搭建内部的git服务器,然后在协同开发。那么在搭建内部git服务器,我们可以使用gitosis来辅助我们去完成。Gitosis 是一套用来管理 authorized_keys文件和实现简单连接限制的脚本,它是Python开发的,所以要保证Python和Python setuptools提前安装好。
参考:

http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way/

一、替换ubuntu更新源为国内更新源
1.在这里使用清华大学开源软件镜像站,直接参考:

https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

2.配置更新源列表,配置之前先保存之前的源列表

root@book-virtual-machine:~# cp /etc/apt/sources.list /etc/apt/sources.list.back
root@book-virtual-machine:~# vim /etc/apt/sources.list
    # 默认注释了源码镜像以提高apt update速度,如有需要可自行取消注释
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-security main restricted universe multiverse

    # 预发布软件源,不建议启用
    # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse

root@book-virtual-machine:~# vim /etc/resolv.conf
nameserver 127.0.0.1
nameserver 101.6.6.6 #清华大学开源软件镜像站 DNS地址
root@book-virtual-machine:~# apt-get clean
root@book-virtual-machine:~# apt-get update

3.在搭建本地GIT服务器,除了git服务器相关的软件,还需要用到用户访问认证。在搭建服务器的过程中由于更新源库的问题。

book@book-virtual-machine:~$ sudo apt-get install git-core python-setuptools

4.下载并安装gitosis

cd ~/src
git clone https://github.com/tv42/gitosis.git
cd gitosis
python setup.py install

5.添加用户git

root@book-virtual-machine:/home/book# adduser git
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
Sorry, passwords do not match
passwd: Authentication token manipulation error
passwd: password unchanged
Try again? [y/N] y
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for git
Enter the new value, or press ENTER for the default
    Full Name []: 
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n]

二、配置SSH和生成密钥
1.安装openssh

book@book-virtual-machine:~$ sudo apt-get install openssh-server openssh-client

2.修改sshd配置文件

book@book-virtual-machine:/$ sudo vim /etc/ssh/sshd_config
/***加大key的位数***/
ServerKeyBits 768    --->  ServerKeyBits 1024
/***禁止root用户登录***/
PermitRootLogin yes  ---> PermitRootLogin no
/***打开AuthorizedKeysFile ***/
AuthorizedKeysFile      %h/.ssh/authorized_keys

3.生成git用户的密钥(切换到git用户)

git@book-virtual-machine:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/git/.ssh/id_rsa): 
Created directory '/home/git/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/git/.ssh/id_rsa.
Your public key has been saved in /home/git/.ssh/id_rsa.pub.
The key fingerprint is:
c5:36:b1:87:04:ff:97:6a:de:08:f6:5f:05:20:a8:0b git@book-virtual-machine
The key's randomart image is:
+--[ RSA 2048]----+
|        .o+ .    |
|        .+ = .   |
|       .  O . .  |
|    E .  o +   o |
|     . .S   . o .|
|      .      o  .|
|          o o   .|
|         . = o . |
|            +.o  |
+-----------------+

三、初始化gitosis
1.配置git全局参数

git config --global user.name "git"
git config --global user.email "xxx@xxx.com"

2.使用git管理员的公钥来初始化gitosis

git@book-virtual-machine:~$ gitosis-init < ~/.ssh/id_rsa.pub 
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/

初始化成功后生成下面两个目录

git@book-virtual-machine:~$ ls
gitosis  repositories

3.修改post-update权限

git@book-virtual-machine:~$ chmod 755 ~/repositories/gitosis-admin.git/hooks/post-update

4.测试ssh是否能通过公钥访问:

git@book-virtual-machine:~$ ssh git@192.168.1.123
The authenticity of host '192.168.1.123 (192.168.1.123)' can't be established.
ECDSA key fingerprint is df:20:21:5c:73:76:b8:32:13:31:47:19:1f:ef:fc:fb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.123' (ECDSA) to the list of known hosts.
PTY allocation request failed on channel 0
ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.
Connection to 192.168.1.123 closed.

从上面来看,SSH登录git用户已经成功了。

5.使用git clone把gitosis-admin clone下来进行管理

git@book-virtual-machine:/work/management$ git clone git@192.168.1.123:gitosis-admin.git
Cloning into 'gitosis-admin'...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.
git@book-virtual-machine:/work/management$ ls
gitosis-admin

6.安装完成

四、gitosis管理功能测试
1.使用之前的book用户去访问git用户下的test.git
1.1 在git用户下创建test.git

git@book-virtual-machine:~/repositories$ mkdir test.git
git@book-virtual-machine:~/repositories$ ls
gitosis-admin.git  test.git

1.2 初始化test.git空仓库

git@book-virtual-machine:~/repositories$ cd test.git/
git@book-virtual-machine:~/repositories/test.git$ git init --bare
Initialized empty Git repository in /home/git/repositories/test.git/

2.添加book用户到gitosis上

git@book-virtual-machine:/work/management/gitosis-admin$ ls
gitosis.conf  keydir
git@book-virtual-machine:/work/management/gitosis-admin$ vim gitosis.conf
[gitosis]

[group gitosis-admin]
members = git@book-virtual-machine
writable = gitosis-admin
/*- 添加test仓库和book用户,格式仿上面即可,更溜玩法请百度 -*/
[group test]
members = book@book-virtual-machine
writable = test

12
3.book用户生成密钥并且把公钥给到git用户
3.1 生成book的密钥

book@book-virtual-machine:~$ cd ~
book@book-virtual-machine:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/book/.ssh/id_rsa): 
Created directory '/home/book/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/book/.ssh/id_rsa.
Your public key has been saved in /home/book/.ssh/id_rsa.pub.
The key fingerprint is:
86:a8:42:1e:a2:77:4f:92:7f:00:eb:c4:7f:5a:9d:8c book@book-virtual-machine
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|    .. .         |
|.o ..o. S        |
|= ..+... + .     |
|o.oo+...E +      |
| o ..=..o        |
|      ++         |
+-----------------+

3.2 book用户的公钥给git,公钥的名字一定要和上面gitosis.conf设置的用户名一样

book@book-virtual-machine:~$ sudo cp .ssh/id_rsa.pub /work/management/gitosis-admin/keydir/book@book-virtual-machine.pub

3.3 上传修改到gitosis上(上面的修改都是在clone下来的本地code操作的,因此修改的东西需要上传上去)

git@book-virtual-machine:/work/management/gitosis-admin$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   gitosis.conf
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   keydir/book@book-virtual-machine.pub
no changes added to commit (use "git add" and/or "git commit -a")
git@book-virtual-machine:/work/management/gitosis-admin$ git add .
git@book-virtual-machine:/work/management/gitosis-admin$ git commit -m "add test"
git@book-virtual-machine:/work/management/gitosis-admin$ git pushCounting objects: 8, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 796 bytes, done.
Total 5 (delta 0), reused 0 (delta 0)
To git@192.168.1.123:gitosis-admin.git
   756407b..0a43978  master -> master

五、最终测试book用户是否能访问到test

book@book-virtual-machine:/work$ git clone git@192.168.1.123:test.git
Cloning into 'test'...
The authenticity of host '192.168.1.123 (192.168.1.123)' can't be established.
ECDSA key fingerprint is df:20:21:5c:73:76:b8:32:13:31:47:19:1f:ef:fc:fb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.123' (ECDSA) to the list of known hosts.
warning: You appear to have cloned an empty repository.
book@book-virtual-machine:/work$ ls
management  test

至此,成功。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn