msm8953 uart 구성
카탈로그
uart 드라이브는 내장 드라이브를 사용합니다. 직접 작성할 필요가 없고, 일반적으로 장치 트리만 수정할 수 있습니다.
1. 장치 트리 수정
장치 트리의 구성은 다음과 같습니다.
1.msm8953.dtsi에 코드 추가
blsp2_uart2: serial@7af0000 {
compatible = "qcom,msm-lsuart-v14";
reg = <0x7af0000 0x200>;
interrupts = <0 307 0>;
status = "disabled";
clocks = <&clock_gcc clk_gcc_blsp2_uart2_apps_clk>,
<&clock_gcc clk_gcc_blsp2_ahb_clk>;
clock-names = "core_clk", "iface_clk";
};
2. msm8953-pinctrl.dtsi에 코드 추가
hsuart_active: default {
mux {
pins = "gpio20", "gpio21";
function = "blsp_uart6";
};
config {
pins = "gpio20", "gpio21";
drive-strength = <2>;
bias-disable;
};
};
hsuart_sleep: sleep {
mux {
pins = "gpio20", "gpio21";
function = "gpio";
};
config {
pins = "gpio20", "gpio21";
drive-strength = <2>;
bias-disable;
};
};
3.msm8953-nopmi-qrd에서.dtsi에 코드 추가
&blsp2_uart2 {
status = "ok";
pinctrl-names = "default";
pinctrl-0 = <&hsuart_active>;
};
장치 트리 설정이 완료되면 bootimage, 브러시, 리셋을 컴파일합니다.# user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:25]
$ adb reboot bootloader
# user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:30]
$ fastboot flash boot boot.img
target reported max download size of 536870912 bytes
sending 'boot' (24775 KB)...
OKAY [ 0.710s]
writing 'boot'...
OKAY [ 0.358s]
finished. total time: 1.068s
# user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:35]
$ fastboot reboot
장치가 시작된 후 예상되는/dev/ttyHSL3의 장치 노드를 찾을 수 없습니다.여기서 생각나는 것은 먼저 설비 트리가 정확하게 수정되었는지 확인하는 것이다.
2. 루트 파일 시스템에서 장치 트리 보기
참고 자료: 장치 트리 학습(10. 루트 파일 시스템에서 장치 트리 보기) 루트 파일 시스템에서 장치 트리 보기(디버깅에 도움) 아래 핵은 전재에 속한다.
a. /sys/firmware/fdt
/sys/firmware 디렉터리에 들어가면 두 개의 파일을 볼 수 있습니다. 하나는 devicetree 폴더이고, 다른 하나는 fdt(원시 dtb 파일,hexdump-C fdt로 출력해서 보면 안에 있는 데이터와 dtb 파일이 일치합니다.)
b. /sys/firmware/devicetree
디렉터리 구조로 보이는 dtb 파일입니다.루트 노드는base 디렉터리에 대응하고, 노드마다 디렉터리에 대응하며, 속성마다 파일에 대응한다
c. /sys/devices/platform
시스템의 모든 platformdevice, 장치 트리에서 온 것도 있고, 온 것도 있습니다.c 파일에 등록된 장치 트리의 platformdevice,/sys/devices/platform//of 에 들어갈 수 있습니다de는 장치 트리 속성을 봅니다. (예:/sys/devices/platform/led/이 디렉터리에 of node 노드가 있는 것을 발견하면 이platform device가 장치 트리에서 온 것을 나타냅니다.)
d. /proc/device-tree
링크 파일입니다./sys/firmware/devicetree/base를 가리킵니다.
dump의 fdt 파일을 보니 uart6의 설정 정보가 있고 설정이 정확합니다.그리고 인터넷에 올라가서 자료를 찾아봐.
질문 uart , 。
4. 수정 드라이브 보기
네트워크에서 참고 자료를 찾았을 때 드라이버를 수정해야 한다는 것을 발견했습니다. 여기 있는 uart는 설정된 4번 uart입니다.kernel/msmsm-3.18/drivers/tty/serial 경로에서 msm 를 수정해야 합니다.serial_hs_lite.c 파일.아래와 같이 변경합니다.static struct msm_hsl_port msm_hsl_uart_ports[] = {
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 0,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 1,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 2,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 3,
},
},
};
로그를 보십시오. 정확한 로드 드라이브가 있으면 detected port #%d (ttyHSL%d) 의 로그를 출력하고 probe 함수를 분석합니다.probe 함수 코드는 다음과 같습니다.static int msm_serial_hsl_probe(struct platform_device *pdev)
{
struct msm_hsl_port *msm_hsl_port;
struct resource *uart_resource;
struct resource *gsbi_resource;
struct uart_port *port;
struct msm_serial_hslite_platform_data *pdata;
const struct of_device_id *match;
u32 line;
int ret;
if (pdev->id == -1)
pdev->id = atomic_inc_return(&msm_serial_hsl_next_id) - 1;
/* Use line (ttyHSLx) number from pdata or device tree if specified */
pdata = pdev->dev.platform_data;
if (pdata)
line = pdata->line;
else
line = pdev->id;
/* Use line number from device tree alias if present */
if (pdev->dev.of_node) {
dev_dbg(&pdev->dev, "device tree enabled
");
ret = of_alias_get_id(pdev->dev.of_node, "serial");
if (ret >= 0)
line = ret;
pdata = msm_hsl_dt_to_pdata(pdev);
if (IS_ERR(pdata))
return PTR_ERR(pdata);
pdev->dev.platform_data = pdata;
}
if (unlikely(line < 0 || line >= UART_NR))
return -ENXIO;
pr_info("detected port #%d (ttyHSL%d)
", pdev->id, line);
......
probe 함수 코드에서 line에 대한 판단은 다음과 같습니다.// UART_NR msm_hsl_uart_ports
#define UART_NR ARRAY_SIZE(msm_hsl_uart_ports)
static int msm_serial_hsl_probe(struct platform_device *pdev)
{
/* Use line (ttyHSLx) number from pdata or device tree if specified */
pdata = pdev->dev.platform_data;
if (pdata)
line = pdata->line; // , pdata line ?
else
line = pdev->id;
/* Use line number from device tree alias if present */
......
if (unlikely(line < 0 || line >= UART_NR))
return -ENXIO; // UART_NR
요약: msmhsl_uart_ports의 요소 개수가 3이면 장치 트리에 네 번째uart를 설정하면 프로브 함수를 직접 끝내고 관련 로그를 출력하지 않습니다.msmhsl_uart_ports에 요소를 추가하면 내가 겪는 문제를 해결할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
blsp2_uart2: serial@7af0000 {
compatible = "qcom,msm-lsuart-v14";
reg = <0x7af0000 0x200>;
interrupts = <0 307 0>;
status = "disabled";
clocks = <&clock_gcc clk_gcc_blsp2_uart2_apps_clk>,
<&clock_gcc clk_gcc_blsp2_ahb_clk>;
clock-names = "core_clk", "iface_clk";
};
hsuart_active: default {
mux {
pins = "gpio20", "gpio21";
function = "blsp_uart6";
};
config {
pins = "gpio20", "gpio21";
drive-strength = <2>;
bias-disable;
};
};
hsuart_sleep: sleep {
mux {
pins = "gpio20", "gpio21";
function = "gpio";
};
config {
pins = "gpio20", "gpio21";
drive-strength = <2>;
bias-disable;
};
};
&blsp2_uart2 {
status = "ok";
pinctrl-names = "default";
pinctrl-0 = <&hsuart_active>;
};
# user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:25]
$ adb reboot bootloader
# user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:30]
$ fastboot flash boot boot.img
target reported max download size of 536870912 bytes
sending 'boot' (24775 KB)...
OKAY [ 0.710s]
writing 'boot'...
OKAY [ 0.358s]
finished. total time: 1.068s
# user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:35]
$ fastboot reboot
참고 자료: 장치 트리 학습(10. 루트 파일 시스템에서 장치 트리 보기) 루트 파일 시스템에서 장치 트리 보기(디버깅에 도움) 아래 핵은 전재에 속한다.
a. /sys/firmware/fdt
/sys/firmware 디렉터리에 들어가면 두 개의 파일을 볼 수 있습니다. 하나는 devicetree 폴더이고, 다른 하나는 fdt(원시 dtb 파일,hexdump-C fdt로 출력해서 보면 안에 있는 데이터와 dtb 파일이 일치합니다.)
b. /sys/firmware/devicetree
디렉터리 구조로 보이는 dtb 파일입니다.루트 노드는base 디렉터리에 대응하고, 노드마다 디렉터리에 대응하며, 속성마다 파일에 대응한다
c. /sys/devices/platform
시스템의 모든 platformdevice, 장치 트리에서 온 것도 있고, 온 것도 있습니다.c 파일에 등록된 장치 트리의 platformdevice,/sys/devices/platform//of 에 들어갈 수 있습니다de는 장치 트리 속성을 봅니다. (예:/sys/devices/platform/led/이 디렉터리에 of node 노드가 있는 것을 발견하면 이platform device가 장치 트리에서 온 것을 나타냅니다.)
d. /proc/device-tree
링크 파일입니다./sys/firmware/devicetree/base를 가리킵니다.
dump의 fdt 파일을 보니 uart6의 설정 정보가 있고 설정이 정확합니다.그리고 인터넷에 올라가서 자료를 찾아봐.
질문 uart , 。
4. 수정 드라이브 보기
네트워크에서 참고 자료를 찾았을 때 드라이버를 수정해야 한다는 것을 발견했습니다. 여기 있는 uart는 설정된 4번 uart입니다.kernel/msmsm-3.18/drivers/tty/serial 경로에서 msm 를 수정해야 합니다.serial_hs_lite.c 파일.아래와 같이 변경합니다.static struct msm_hsl_port msm_hsl_uart_ports[] = {
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 0,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 1,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 2,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 3,
},
},
};
로그를 보십시오. 정확한 로드 드라이브가 있으면 detected port #%d (ttyHSL%d) 의 로그를 출력하고 probe 함수를 분석합니다.probe 함수 코드는 다음과 같습니다.static int msm_serial_hsl_probe(struct platform_device *pdev)
{
struct msm_hsl_port *msm_hsl_port;
struct resource *uart_resource;
struct resource *gsbi_resource;
struct uart_port *port;
struct msm_serial_hslite_platform_data *pdata;
const struct of_device_id *match;
u32 line;
int ret;
if (pdev->id == -1)
pdev->id = atomic_inc_return(&msm_serial_hsl_next_id) - 1;
/* Use line (ttyHSLx) number from pdata or device tree if specified */
pdata = pdev->dev.platform_data;
if (pdata)
line = pdata->line;
else
line = pdev->id;
/* Use line number from device tree alias if present */
if (pdev->dev.of_node) {
dev_dbg(&pdev->dev, "device tree enabled
");
ret = of_alias_get_id(pdev->dev.of_node, "serial");
if (ret >= 0)
line = ret;
pdata = msm_hsl_dt_to_pdata(pdev);
if (IS_ERR(pdata))
return PTR_ERR(pdata);
pdev->dev.platform_data = pdata;
}
if (unlikely(line < 0 || line >= UART_NR))
return -ENXIO;
pr_info("detected port #%d (ttyHSL%d)
", pdev->id, line);
......
probe 함수 코드에서 line에 대한 판단은 다음과 같습니다.// UART_NR msm_hsl_uart_ports
#define UART_NR ARRAY_SIZE(msm_hsl_uart_ports)
static int msm_serial_hsl_probe(struct platform_device *pdev)
{
/* Use line (ttyHSLx) number from pdata or device tree if specified */
pdata = pdev->dev.platform_data;
if (pdata)
line = pdata->line; // , pdata line ?
else
line = pdev->id;
/* Use line number from device tree alias if present */
......
if (unlikely(line < 0 || line >= UART_NR))
return -ENXIO; // UART_NR
요약: msmhsl_uart_ports의 요소 개수가 3이면 장치 트리에 네 번째uart를 설정하면 프로브 함수를 직접 끝내고 관련 로그를 출력하지 않습니다.msmhsl_uart_ports에 요소를 추가하면 내가 겪는 문제를 해결할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
uart , 。
네트워크에서 참고 자료를 찾았을 때 드라이버를 수정해야 한다는 것을 발견했습니다. 여기 있는 uart는 설정된 4번 uart입니다.kernel/msmsm-3.18/drivers/tty/serial 경로에서 msm 를 수정해야 합니다.serial_hs_lite.c 파일.아래와 같이 변경합니다.
static struct msm_hsl_port msm_hsl_uart_ports[] = {
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 0,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 1,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 2,
},
},
{
.uart = {
.iotype = UPIO_MEM,
.ops = &msm_hsl_uart_pops,
.flags = UPF_BOOT_AUTOCONF,
.fifosize = 64,
.line = 3,
},
},
};
로그를 보십시오. 정확한 로드 드라이브가 있으면 detected port #%d (ttyHSL%d) 의 로그를 출력하고 probe 함수를 분석합니다.probe 함수 코드는 다음과 같습니다.
static int msm_serial_hsl_probe(struct platform_device *pdev)
{
struct msm_hsl_port *msm_hsl_port;
struct resource *uart_resource;
struct resource *gsbi_resource;
struct uart_port *port;
struct msm_serial_hslite_platform_data *pdata;
const struct of_device_id *match;
u32 line;
int ret;
if (pdev->id == -1)
pdev->id = atomic_inc_return(&msm_serial_hsl_next_id) - 1;
/* Use line (ttyHSLx) number from pdata or device tree if specified */
pdata = pdev->dev.platform_data;
if (pdata)
line = pdata->line;
else
line = pdev->id;
/* Use line number from device tree alias if present */
if (pdev->dev.of_node) {
dev_dbg(&pdev->dev, "device tree enabled
");
ret = of_alias_get_id(pdev->dev.of_node, "serial");
if (ret >= 0)
line = ret;
pdata = msm_hsl_dt_to_pdata(pdev);
if (IS_ERR(pdata))
return PTR_ERR(pdata);
pdev->dev.platform_data = pdata;
}
if (unlikely(line < 0 || line >= UART_NR))
return -ENXIO;
pr_info("detected port #%d (ttyHSL%d)
", pdev->id, line);
......
probe 함수 코드에서 line에 대한 판단은 다음과 같습니다.
// UART_NR msm_hsl_uart_ports
#define UART_NR ARRAY_SIZE(msm_hsl_uart_ports)
static int msm_serial_hsl_probe(struct platform_device *pdev)
{
/* Use line (ttyHSLx) number from pdata or device tree if specified */
pdata = pdev->dev.platform_data;
if (pdata)
line = pdata->line; // , pdata line ?
else
line = pdev->id;
/* Use line number from device tree alias if present */
......
if (unlikely(line < 0 || line >= UART_NR))
return -ENXIO; // UART_NR
요약: msmhsl_uart_ports의 요소 개수가 3이면 장치 트리에 네 번째uart를 설정하면 프로브 함수를 직접 끝내고 관련 로그를 출력하지 않습니다.msmhsl_uart_ports에 요소를 추가하면 내가 겪는 문제를 해결할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.