[linux]GPIO 设备树

在/节点下添加
aledspx: aledspx {
compatible = “agpio-leds”;
pinctrl-names = “default”;
pinctrl-0 =<&aleds_gpio>;

led@1 {
gpios = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>;
label = “astatus_led”;
};
};

pinctr中加入
awork-led {
aleds_gpio: aleds-gpio {
rockchip,pins = <0 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
};
};

——————————————————————-
多个IO可这样写
leds: leds {
compatible = “gpio-leds”;
pinctrl-names = “default”;
pinctrl-0 =<&leds_gpio>;

led = <&gpio0 RK_PC0 GPIO_ACTIVE_LOW>;
ledb = <&gpio0 RK_PC1 GPIO_ACTIVE_LOW>;
ledc = <&gpio0 RK_PC2 GPIO_ACTIVE_LOW>;

};

pinctr:

work-led {
leds_gpio: leds-gpio {
rockchip,pins = < 0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>,
< 0 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>,
< 0 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
};
};

—————————–也可以这样写————————————
leds: leds {
compatible = “gpio-leds”;
pinctrl-names = “default”;
pinctrl-0 =<&leds_gpio>;

led@1 {
gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>;
label = “status_led”;
linux,default-trigger = “heartbeat”;
};
leda {
gpios = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>;
label = “astatus_led”;
};
ledb {
gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>;
label = “bstatus_led”;
};
};

pinctr:

work-led {
leds_gpio: leds-gpio {
rockchip,pins = < 0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>,
< 0 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>,
< 0 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
};
};

编译设备树

[linux]ssh连不上

//检查状态
sudo service ssh status
//重启
sudo service ssh restart
//卸载重装
sudo apt-get remove –purge openssh-server
sudo apt-get update
sudo apt-get install openssh-server

[orangepi]添加dtbo节点

1.在 内核/arch/arm64/boot/dts/rockchip/overlay下新建 rk356x-xxxx.dts,注意前缀必须是rk356x,否则开发板的orangeEnv.txt有规则不认文件
2.返回内核目录 sudo make ARCH=arm64 rockchip/overlay/rk356x-test-led.dtbo 会生成 rk356x-test-led.dtbo
3.将dtbo文件拷贝到开发板/boot/dtb/rockchip/overlay 目录下
4.修改开发板/boot/orangepiEnv.txt
5.在txt文件的最后一行加上 overlays=test-led ,即把dtbo文件的前缀和后缀去掉
6.重启开发板,在/proc/device-tree下可以看到新加的节点

rk356x-test-led.dts

/dts-v1/;
/plugin/;

/ {
fragment@0 {
target-path = “/”;

__overlay__ {
/*添加led_test节点,*/
led_test{
#address-cells = <1>;
#size-cells = <1>;
compatible = “fire,led_test”;
ranges;

//例程是控制lubancat2的系统灯 GPIO0_C7
led@0xfdd60004{
reg = <0xfdd60004 0x00000004 0xfdd6000C 0x00000004>; //数据寄存器和数据方向寄存器(高16位)
status = “okay”;
};
};
};
};
};

[linux]ssh/scp传输失败

1.windows 连接linux失败
删除windos下的.ssh文件夹下的

2.scp失败
(1)删除源的~/.ssh/known_hosts
(2)ssh-keygen -f “/root/.ssh/known_hosts” -R “目标IP”

[linux]文件互传

sudo apt-get update
sudo apt-get install vsftpd
sudo vi /etc/vsftpd.conf
默认情况下,“write_enable=YES”前面有一个“#”号,我们需要将其去掉,使能该配置。
修改完成后保存退出,然后执行如下命令重启 FTP 服务:

sudo /etc/init.d/vsftpd restart
可通过如下命令确认 FTP 服务是否开启:
ps -aux | grep vsftpd | grep -v grep

使用FileZilla软件进行文件互传

[OrangePi]设备树相关

查看开发板的设备树和设备节点
/proc/decive-tree 目录

在linux中查看使用哪个dtb,在u-boot源码里搜索
grep -nR “rk3566-orangepi-3b.dtb”*

编译特定的dtb
在kernel目录下, make ARCH=arm64 dtbs
例如 make ARCH=arm64 rockchip/rk3566-orangepi-3b-v2.dtb

make ARCH=arm64 rockchip/rk3566-orangepi-3b-v2.dtb

生成的dtb在/sdk/orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip 目录下,替换掉开发板的即可

scp /home/yue/sdk/orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-3b-v2.dtb orangepi@192.168.0.
105:/boot/dtb/rockchip

//将编译的dtb传输到开发板上
#!/bin/bash
chmod 777 /home/yue/sdk/orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-3b-v2.dtb
scp /home/yue/sdk/orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-3b-v2.dtb orangepi@192.168.0.105:/home/orangepi

//将开发板home目录下的dtb放到正确的未知

#!/bin/bash
chmod 777 ./rk3566-orangepi-3b-v2.dtb
sudo cp ./rk3566-orangepi-3b-v2.dtb /boot/dtb/rockchip

编译链
aarch64-linux-gnu-gcc -v

FileZilla Client

[OrangePi]安装SVN

sudo apt update
sudo apt install xfce4 xfce4-goodies
sudo apt install tightvncserver

安装语言包,不然会出错Fatal server error:could not open default font ‘fixed’
sudo apt-get install xfonts-base

配置密码
vncserver
密码

配置开机启动
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
vim ~/.vnc/xstartup

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

sudo chmod +x ~/.vnc/xstartup

重置密码
vncpasswd

灰屏解决
sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal

vim ~/.vnc/xstartup

添加
—————————————————————————————–
#!/bin/bash
export $(dbus-launch) # 主要是这句
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &

# [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
# [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources

xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80×24+10+10 -ls -title “$VNCDESKTOP Desktop” &
gnome-session &
—————————————————————————————-
重启vnc
vncserver -kill :1
vncserver -kill :2
vncserver :1 -geometry 1536×864

[linux]设备号申请

没有指定设备号
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)
指定了设备号
int register_chrdev_region(dev_t from, unsigned count, const char *name)

释放设备号
void unregister_chrdev_region(dev_t from, unsigned count)

———————————————
字符设备结构
cdev
cdev 中有两个重要的成员变量: ops 和 dev,这两个就是字符设备文件操作函数集合
file_operations 以及设备号 dev_t。编写字符设备驱动之前需要定义一个 cdev 结构体变量,这个
变量就表示一个字符设备,
定义好 cdev 变量以后就要使用 cdev_init 函数对其进行初始化, cdev_init 函数原型如下:
void cdev_init(struct cdev *cdev, const struct file_operations *fops)

[linux]加载驱动

//加载驱动
modprobe led.ko
如果提示无法打开“modules.dep” 输入 depmod

查看设备
cat /proc/devices

创建设备节点
mknod /dev/chrdevbase c 200 0