Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
-
msi_g ~ # zcat /proc/config.gz | grep USB_SERIAL
-
CONFIG_USB_SERIAL=y
-
# CONFIG_USB_SERIAL_CONSOLE is not set
-
CONFIG_USB_SERIAL_GENERIC=y
-
# CONFIG_USB_SERIAL_SIMPLE is not set
-
# CONFIG_USB_SERIAL_AIRCABLE is not set
-
# CONFIG_USB_SERIAL_ARK3116 is not set
-
# CONFIG_USB_SERIAL_BELKIN is not set
-
# CONFIG_USB_SERIAL_CH341 is not set
-
# CONFIG_USB_SERIAL_WHITEHEAT is not set
-
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-
# CONFIG_USB_SERIAL_CP210X is not set
-
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-
# CONFIG_USB_SERIAL_EMPEG is not set
-
# CONFIG_USB_SERIAL_FTDI_SIO is not set
-
# CONFIG_USB_SERIAL_VISOR is not set
-
# CONFIG_USB_SERIAL_IPAQ is not set
-
# CONFIG_USB_SERIAL_IR is not set
-
# CONFIG_USB_SERIAL_EDGEPORT is not set
-
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-
# CONFIG_USB_SERIAL_F81232 is not set
-
# CONFIG_USB_SERIAL_GARMIN is not set
-
# CONFIG_USB_SERIAL_IPW is not set
-
# CONFIG_USB_SERIAL_IUU is not set
-
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-
# CONFIG_USB_SERIAL_KEYSPAN is not set
-
# CONFIG_USB_SERIAL_KLSI is not set
-
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-
# CONFIG_USB_SERIAL_MCT_U232 is not set
-
# CONFIG_USB_SERIAL_METRO is not set
-
# CONFIG_USB_SERIAL_MOS7720 is not set
-
# CONFIG_USB_SERIAL_MOS7840 is not set
-
# CONFIG_USB_SERIAL_MXUPORT is not set
-
# CONFIG_USB_SERIAL_NAVMAN is not set
-
# CONFIG_USB_SERIAL_PL2303 is not set
-
# CONFIG_USB_SERIAL_OTI6858 is not set
-
# CONFIG_USB_SERIAL_QCAUX is not set
-
CONFIG_USB_SERIAL_QUALCOMM=y
-
# CONFIG_USB_SERIAL_SPCP8X5 is not set
-
# CONFIG_USB_SERIAL_SAFE is not set
-
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-
# CONFIG_USB_SERIAL_SYMBOL is not set
-
# CONFIG_USB_SERIAL_TI is not set
-
# CONFIG_USB_SERIAL_CYBERJACK is not set
-
# CONFIG_USB_SERIAL_XIRCOM is not set
-
CONFIG_USB_SERIAL_WWAN=y
-
# CONFIG_USB_SERIAL_OPTION is not set
-
# CONFIG_USB_SERIAL_OMNINET is not set
-
# CONFIG_USB_SERIAL_OPTICON is not set
-
# CONFIG_USB_SERIAL_XSENS_MT is not set
-
# CONFIG_USB_SERIAL_WISHBONE is not set
-
# CONFIG_USB_SERIAL_SSU100 is not set
-
# CONFIG_USB_SERIAL_QT2 is not set
-
# CONFIG_USB_SERIAL_DEBUG is not set
-
msi_g ~ # dmesg | tail
-
[ 361.094768] scsi host6: usb—storage 1—1.2:1.0
-
[ 366.883196] usb 1—1.2: USB disconnect, device number 4
-
[ 367.120551] usb 1—1.2: new high—speed USB device number 5 using ehci—pci
-
[ 367.247851] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=1403
-
[ 367.247854] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 367.247856] usb 1—1.2: Product: ZTE Technologies MSM
-
[ 367.247857] usb 1—1.2: Manufacturer: ZTE,Incorporated
-
[ 367.247858] usb 1—1.2: SerialNumber: P680A1ZTED000000
-
[ 367.251897] usb—storage 1—1.2:1.2: USB Mass Storage device detected
-
[ 367.252130] scsi host7: usb—storage 1—1.2:1.2
-
msi_g ~ # dmesg | tail
-
[ 367.252130] scsi host7: usb—storage 1—1.2:1.2
-
[ 367.802176] usbcore: registered new interface driver cdc_ether
-
[ 367.819104] rndis_host 1—1.2:1.0 usb0: register ‘rndis_host’ at usb—0000:00:1a.0—1.2, RNDIS device, 36:4b:50:b7:ef:da
-
[ 367.819134] usbcore: registered new interface driver rndis_host
-
[ 367.822048] usbcore: registered new interface driver rndis_wlan
-
[ 367.823031] rndis_host 1—1.2:1.0 enp0s26u1u2: renamed from usb0
-
[ 368.254097] scsi 7:0:0:0: CD—ROM CWID USB SCSI CD—ROM 2.31 PQ: 0 ANSI: 2
-
[ 368.257145] sr 7:0:0:0: [sr1] scsi—1 drive
-
[ 368.257289] sr 7:0:0:0: Attached scsi CD—ROM sr1
-
[ 368.257364] sr 7:0:0:0: Attached scsi generic sg3 type 5
-
msi_g ~ # dmesg | tail
-
[ 367.252130] scsi host7: usb—storage 1—1.2:1.2
-
[ 367.802176] usbcore: registered new interface driver cdc_ether
-
[ 367.819104] rndis_host 1—1.2:1.0 usb0: register ‘rndis_host’ at usb—0000:00:1a.0—1.2, RNDIS device, 36:4b:50:b7:ef:da
-
[ 367.819134] usbcore: registered new interface driver rndis_host
-
[ 367.822048] usbcore: registered new interface driver rndis_wlan
-
[ 367.823031] rndis_host 1—1.2:1.0 enp0s26u1u2: renamed from usb0
-
[ 368.254097] scsi 7:0:0:0: CD—ROM CWID USB SCSI CD—ROM 2.31 PQ: 0 ANSI: 2
-
[ 368.257145] sr 7:0:0:0: [sr1] scsi—1 drive
-
[ 368.257289] sr 7:0:0:0: Attached scsi CD—ROM sr1
-
[ 368.257364] sr 7:0:0:0: Attached scsi generic sg3 type 5
-
msi_g ~ # dmesg | tail
-
[ 367.252130] scsi host7: usb—storage 1—1.2:1.2
-
[ 367.802176] usbcore: registered new interface driver cdc_ether
-
[ 367.819104] rndis_host 1—1.2:1.0 usb0: register ‘rndis_host’ at usb—0000:00:1a.0—1.2, RNDIS device, 36:4b:50:b7:ef:da
-
[ 367.819134] usbcore: registered new interface driver rndis_host
-
[ 367.822048] usbcore: registered new interface driver rndis_wlan
-
[ 367.823031] rndis_host 1—1.2:1.0 enp0s26u1u2: renamed from usb0
-
[ 368.254097] scsi 7:0:0:0: CD—ROM CWID USB SCSI CD—ROM 2.31 PQ: 0 ANSI: 2
-
[ 368.257145] sr 7:0:0:0: [sr1] scsi—1 drive
-
[ 368.257289] sr 7:0:0:0: Attached scsi CD—ROM sr1
-
[ 368.257364] sr 7:0:0:0: Attached scsi generic sg3 type 5
-
msi_g ~ # dmesg | tail
-
[ 368.257145] sr 7:0:0:0: [sr1] scsi—1 drive
-
[ 368.257289] sr 7:0:0:0: Attached scsi CD—ROM sr1
-
[ 368.257364] sr 7:0:0:0: Attached scsi generic sg3 type 5
-
[ 440.179577] usb 1—1.2: USB disconnect, device number 5
-
[ 440.181577] rndis_host 1—1.2:1.0 enp0s26u1u2: unregister ‘rndis_host’ usb—0000:00:1a.0—1.2, RNDIS device
-
[ 440.491680] usb 1—1.2: new high—speed USB device number 6 using ehci—pci
-
[ 440.619892] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0016
-
[ 440.619895] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 440.619897] usb 1—1.2: Product: ZTE Technologies MSM
-
[ 440.619898] usb 1—1.2: Manufacturer: ZTE,Incorporated
-
msi_g ~ # ls /dev/tty*
-
/dev/tty /dev/tty12 /dev/tty17 /dev/tty21 /dev/tty26 /dev/tty30 /dev/tty35 /dev/tty4 /dev/tty44 /dev/tty49 /dev/tty53 /dev/tty58 /dev/tty62 /dev/ttyS0
-
/dev/tty0 /dev/tty13 /dev/tty18 /dev/tty22 /dev/tty27 /dev/tty31 /dev/tty36 /dev/tty40 /dev/tty45 /dev/tty5 /dev/tty54 /dev/tty59 /dev/tty63 /dev/ttyS1
-
/dev/tty1 /dev/tty14 /dev/tty19 /dev/tty23 /dev/tty28 /dev/tty32 /dev/tty37 /dev/tty41 /dev/tty46 /dev/tty50 /dev/tty55 /dev/tty6 /dev/tty7 /dev/ttyS2
-
/dev/tty10 /dev/tty15 /dev/tty2 /dev/tty24 /dev/tty29 /dev/tty33 /dev/tty38 /dev/tty42 /dev/tty47 /dev/tty51 /dev/tty56 /dev/tty60 /dev/tty8 /dev/ttyS3
-
/dev/tty11 /dev/tty16 /dev/tty20 /dev/tty25 /dev/tty3 /dev/tty34 /dev/tty39 /dev/tty43 /dev/tty48 /dev/tty52 /dev/tty57 /dev/tty61 /dev/tty9
-
msi_g ~ # lsusb
-
Bus 002 Device 002: ID 8087:8000 Intel Corp.
-
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
Bus 001 Device 003: ID 13d3:3410 IMC Networks
-
Bus 001 Device 006: ID 19d2:0016 ZTE WCDMA Technologies MSM
-
Bus 001 Device 002: ID 8087:8008 Intel Corp.
-
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
-
Bus 003 Device 002: ID 045e:07b2 Microsoft Corp.
-
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
msi_g ~ # echo 19d2 0016 >/sys/bus/usb—serial/drivers/generic/new_id
-
msi_g ~ # dmesg | tail
-
[ 586.370531] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 586.370631] usb 1—1.2: generic converter now attached to ttyUSB0
-
[ 586.370715] usbserial_generic 1—1.2:1.1: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 586.370718] usbserial_generic 1—1.2:1.1: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 586.370720] usbserial_generic 1—1.2:1.1: generic converter detected
-
[ 586.370807] usb 1—1.2: generic converter now attached to ttyUSB1
-
[ 586.370885] usbserial_generic 1—1.2:1.2: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 586.370887] usbserial_generic 1—1.2:1.2: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 586.370889] usbserial_generic 1—1.2:1.2: generic converter detected
-
[ 586.370949] usb 1—1.2: generic converter now attached to ttyUSB2
-
msi_g ~ # cd /home/john/Documents/3g_megafon/qtools/
-
msi_g qtools # ls
-
ZTEDrvSetup.zip ZTE_MF_drv ZTE_MF_drv.zip qtools qtools_win
-
msi_g qtools # cd qtools
-
msi_g qtools # ls
-
LICENSE chipset.cfg getopt.c include.h memio.c nv qblinfo.o qcommand.c qefs qident.o qrflash.c qterminal qwdirect.o sahara.c
-
Makefile dl8200.sh getopt.h ioasm.sh memio.o printf.h qcio.c qcommand.o qefs.c qnvram qrflash.o qterminal.c qwflash sahara.o
-
README.md dload.sh hdlc.c iormem.asm mibibsplit ptable qcio.h qdload qefs.o qnvram.c qrmem qterminal.o qwflash.c winbuild
-
chipconfig.c doc hdlc.o iowmem.asm mibibsplit.c qblinfo qcio.o qdload.c qident qnvram.o qrmem.c qwdirect qwflash.o
-
chipconfig.o dummy.asm identify.asm loaders mibibsplit.o qblinfo.c qcommand qdload.o qident.c qrflash qrmem.o qwdirect.c restart.sh
-
msi_g qtools # ./qcommand —e —c «c 3a»
-
—- ответ —
-
00000000: 3a a1 6e 7e *:.n~ *
-
msi_g qtools # dmesg | tail
-
[ 705.028459] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 705.028562] usb 1—1.2: generic converter now attached to ttyUSB0
-
[ 705.028618] usbserial_generic 1—1.2:1.1: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 705.028619] usbserial_generic 1—1.2:1.1: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 705.028620] usbserial_generic 1—1.2:1.1: generic converter detected
-
[ 705.028706] usb 1—1.2: generic converter now attached to ttyUSB1
-
[ 705.028776] usbserial_generic 1—1.2:1.2: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 705.028777] usbserial_generic 1—1.2:1.2: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 705.028778] usbserial_generic 1—1.2:1.2: generic converter detected
-
[ 705.028857] usb 1—1.2: generic converter now attached to ttyUSB2
-
msi_g qtools # dmesg | tail
-
[ 705.028459] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 705.028562] usb 1—1.2: generic converter now attached to ttyUSB0
-
[ 705.028618] usbserial_generic 1—1.2:1.1: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 705.028619] usbserial_generic 1—1.2:1.1: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 705.028620] usbserial_generic 1—1.2:1.1: generic converter detected
-
[ 705.028706] usb 1—1.2: generic converter now attached to ttyUSB1
-
[ 705.028776] usbserial_generic 1—1.2:1.2: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 705.028777] usbserial_generic 1—1.2:1.2: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 705.028778] usbserial_generic 1—1.2:1.2: generic converter detected
-
[ 705.028857] usb 1—1.2: generic converter now attached to ttyUSB2
-
msi_g qtools # ./qdload —s
-
Ожидаем пакет Hello от устройства…
-
Пакет Hello от устройства не получен
-
msi_g qtools # dmesg | tail
-
[ 705.028459] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 705.028562] usb 1—1.2: generic converter now attached to ttyUSB0
-
[ 705.028618] usbserial_generic 1—1.2:1.1: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 705.028619] usbserial_generic 1—1.2:1.1: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 705.028620] usbserial_generic 1—1.2:1.1: generic converter detected
-
[ 705.028706] usb 1—1.2: generic converter now attached to ttyUSB1
-
[ 705.028776] usbserial_generic 1—1.2:1.2: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 705.028777] usbserial_generic 1—1.2:1.2: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 705.028778] usbserial_generic 1—1.2:1.2: generic converter detected
-
[ 705.028857] usb 1—1.2: generic converter now attached to ttyUSB2
-
msi_g qtools # ./qcommand —e —c «c 3a»
-
—- ответ —
-
00000000: 3a a1 6e 7e *:.n~ *
-
msi_g qtools # dmesg | tail
-
[ 793.848809] usbserial_generic 1—1.2:1.0: device disconnected
-
[ 793.848933] generic ttyUSB1: generic converter now disconnected from ttyUSB1
-
[ 793.848944] usbserial_generic 1—1.2:1.1: device disconnected
-
[ 793.849065] generic ttyUSB2: generic converter now disconnected from ttyUSB2
-
[ 793.849077] usbserial_generic 1—1.2:1.2: device disconnected
-
[ 794.336227] usb 1—1.2: new high—speed USB device number 9 using ehci—pci
-
[ 794.447889] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 794.447893] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
msi_g qtools # lsusb
-
Bus 002 Device 002: ID 8087:8000 Intel Corp.
-
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
Bus 001 Device 003: ID 13d3:3410 IMC Networks
-
Bus 001 Device 009: ID 19d2:0076 ZTE WCDMA Technologies MSM
-
Bus 001 Device 002: ID 8087:8008 Intel Corp.
-
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
-
Bus 003 Device 002: ID 045e:07b2 Microsoft Corp.
-
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
msi_g qtools # echo 19d2 0076 >/sys/bus/usb—serial/drivers/generic/new_id
-
msi_g qtools # lsusb
-
Bus 002 Device 002: ID 8087:8000 Intel Corp.
-
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
Bus 001 Device 003: ID 13d3:3410 IMC Networks
-
Bus 001 Device 009: ID 19d2:0076 ZTE WCDMA Technologies MSM
-
Bus 001 Device 002: ID 8087:8008 Intel Corp.
-
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
-
Bus 003 Device 002: ID 045e:07b2 Microsoft Corp.
-
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-
msi_g qtools # dmesg | tail
-
[ 793.849077] usbserial_generic 1—1.2:1.2: device disconnected
-
[ 794.336227] usb 1—1.2: new high—speed USB device number 9 using ehci—pci
-
[ 794.447889] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 794.447893] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 846.958572] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 846.958574] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 846.958575] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 846.958670] usb 1—1.2: generic converter now attached to ttyUSB0
-
msi_g qtools # dmesg | tail
-
[ 793.849077] usbserial_generic 1—1.2:1.2: device disconnected
-
[ 794.336227] usb 1—1.2: new high—speed USB device number 9 using ehci—pci
-
[ 794.447889] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 794.447893] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 846.958572] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 846.958574] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 846.958575] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 846.958670] usb 1—1.2: generic converter now attached to ttyUSB0
-
msi_g qtools # ./qdload —s
-
Ожидаем пакет Hello от устройства…
-
Идентификатор образа для загрузки: 00000007
-
Загружаем loaders/…
-
Передаём загрузчик в устройство…
-
Ошибка передачи загрузчика
-
msi_g qtools # ./qcommand —e —c «c 3a»
-
—- ответ —
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # ./qdload —s
-
Ожидаем пакет Hello от устройства…
-
Пакет Hello от устройства не получен
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # dmesg | tail
-
[ 793.849077] usbserial_generic 1—1.2:1.2: device disconnected
-
[ 794.336227] usb 1—1.2: new high—speed USB device number 9 using ehci—pci
-
[ 794.447889] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 794.447893] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 846.958572] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 846.958574] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 846.958575] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 846.958670] usb 1—1.2: generic converter now attached to ttyUSB0
-
msi_g qtools # ./qdload —k3 —i
-
Ожидаем пакет Hello от устройства…
-
Пакет Hello от устройства не получен
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # ./qcommand —e —c «c 3a»
-
—- ответ —
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # dmesg | tail
-
[ 793.849077] usbserial_generic 1—1.2:1.2: device disconnected
-
[ 794.336227] usb 1—1.2: new high—speed USB device number 9 using ehci—pci
-
[ 794.447889] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 794.447893] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 846.958572] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 846.958574] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 846.958575] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 846.958670] usb 1—1.2: generic converter now attached to ttyUSB0
-
msi_g qtools # ./qdload —k3 —i
-
Ожидаем пакет Hello от устройства…
-
Пакет Hello от устройства не получен
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # ./qdload —s
-
Ожидаем пакет Hello от устройства…
-
Пакет Hello от устройства не получен
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # ls /dev/ttyUSB*
-
/dev/ttyUSB0
-
msi_g qtools # ./qrflash —x —b0 —l10 —o test.bin
-
Отсылка hello… повторный hello возвратил ошибку!
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
Floating point exception
-
msi_g qtools # ./qcommand —c «c b»
-
—- ответ —
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # ls /dev/ttyUSB*
-
/dev/ttyUSB0
-
msi_g qtools # dmesg | tail
-
[ 794.336227] usb 1—1.2: new high—speed USB device number 9 using ehci—pci
-
[ 794.447889] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 794.447893] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 846.958572] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 846.958574] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 846.958575] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 846.958670] usb 1—1.2: generic converter now attached to ttyUSB0
-
[ 1258.055714] traps: qrflash[4089] trap divide error ip:401472 sp:7fff0f189f50 error:0 in qrflash[400000+8000]
-
msi_g qtools # ./qcommand —e —c «c 4b aa 00 00 00»
-
—- ответ —
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # dmesg | tail
-
[ 794.336227] usb 1—1.2: new high—speed USB device number 9 using ehci—pci
-
[ 794.447889] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 794.447893] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 846.958572] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 846.958574] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 846.958575] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 846.958670] usb 1—1.2: generic converter now attached to ttyUSB0
-
[ 1258.055714] traps: qrflash[4089] trap divide error ip:401472 sp:7fff0f189f50 error:0 in qrflash[400000+8000]
-
msi_g qtools # ./qcommand —e —c «c 29 02 00»
-
—- ответ —
-
00000000: 04 00 00 00 10 00 00 00 07 00 00 00 01 00 00 00 *…………….*
-
msi_g qtools # dmesg | tail
-
[ 794.336227] usb 1—1.2: new high—speed USB device number 9 using ehci—pci
-
[ 794.447889] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 794.447893] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 846.958572] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 846.958574] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 846.958575] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 846.958670] usb 1—1.2: generic converter now attached to ttyUSB0
-
[ 1258.055714] traps: qrflash[4089] trap divide error ip:401472 sp:7fff0f189f50 error:0 in qrflash[400000+8000]
-
msi_g qtools # ifconfig
-
enp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
-
inet6 fe80::9d8d:b64c:290e:3790 prefixlen 64 scopeid 0x20<link>
-
ether 44:8a:5b:ec:e1:1f txqueuelen 1000 (Ethernet)
-
RX packets 0 bytes 0 (0.0 B)
-
RX errors 0 dropped 0 overruns 0 frame 0
-
TX packets 0 bytes 0 (0.0 B)
-
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
device interrupt 19
-
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
-
inet 127.0.0.1 netmask 255.0.0.0
-
inet6 ::1 prefixlen 128 scopeid 0x10<host>
-
loop txqueuelen 0 (Local Loopback)
-
RX packets 322 bytes 50631 (49.4 KiB)
-
RX errors 0 dropped 0 overruns 0 frame 0
-
TX packets 322 bytes 50631 (49.4 KiB)
-
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
wlp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
-
inet 192.168.88.186 netmask 255.255.255.0 broadcast 192.168.88.255
-
inet6 fe80::250e:beb5:521:fc67 prefixlen 64 scopeid 0x20<link>
-
ether 40:e2:30:0c:d0:eb txqueuelen 1000 (Ethernet)
-
RX packets 5324 bytes 1558324 (1.4 MiB)
-
RX errors 0 dropped 845 overruns 0 frame 0
-
TX packets 4043 bytes 787188 (768.7 KiB)
-
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-
msi_g qtools # dmesg | tail
-
[ 794.447894] usb 1—1.2: Product: QHSUSB__BULK
-
[ 794.447896] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 846.958572] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 846.958574] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 846.958575] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 846.958670] usb 1—1.2: generic converter now attached to ttyUSB0
-
[ 1258.055714] traps: qrflash[4089] trap divide error ip:401472 sp:7fff0f189f50 error:0 in qrflash[400000+8000]
-
[ 1677.508108] usb 1—1.2: USB disconnect, device number 9
-
[ 1677.508295] generic ttyUSB0: generic converter now disconnected from ttyUSB0
-
[ 1677.508307] usbserial_generic 1—1.2:1.0: device disconnected
-
msi_g qtools # dmesg | tail
-
[ 1677.508307] usbserial_generic 1—1.2:1.0: device disconnected
-
[ 1735.410241] usb 1—1.2: new high—speed USB device number 10 using ehci—pci
-
[ 1735.521629] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 1735.521632] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 1735.521633] usb 1—1.2: Product: QHSUSB__BULK
-
[ 1735.521635] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 1735.521943] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 1735.521945] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 1735.521946] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 1735.522013] usb 1—1.2: generic converter now attached to ttyUSB0
-
msi_g qtools # ./qcommand —e —c «c 3a»
-
^Z
-
[1]+ Stopped ./qcommand —e —c «c 3a»
-
msi_g qtools # ./qcommand —e —c «c 3a»
-
^Z
-
[2]+ Stopped ./qcommand —e —c «c 3a»
-
msi_g qtools # dmesg | tail
-
[ 2226.830778] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 2226.830872] usb 1—1.2: generic converter now attached to ttyUSB1
-
[ 2226.830934] usbserial_generic 1—1.2:1.1: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 2226.830935] usbserial_generic 1—1.2:1.1: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 2226.830936] usbserial_generic 1—1.2:1.1: generic converter detected
-
[ 2226.830993] usb 1—1.2: generic converter now attached to ttyUSB2
-
[ 2226.831045] usbserial_generic 1—1.2:1.2: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 2226.831046] usbserial_generic 1—1.2:1.2: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 2226.831047] usbserial_generic 1—1.2:1.2: generic converter detected
-
[ 2226.831098] usb 1—1.2: generic converter now attached to ttyUSB3
-
msi_g qtools # ./qcommand —e —c «c 3a»
-
— Последовательный порт /dev/ttyUSB0 не открывается
-
msi_g qtools # ./qcommand —p1 —e —c «c 3a»
-
—- ответ —
-
00000000: 3a a1 6e 7e *:.n~ *
-
msi_g qtools # ./qcommand —p2 —e —c «c 3a»
-
— Последовательный порт 2 не открывается
-
msi_g qtools # ./qcommand —p3 —e —c «c 3a»
-
— Последовательный порт 3 не открывается
-
msi_g qtools # ls /dev/ttyUSB*
-
/dev/ttyUSB1
-
msi_g qtools # dmesg | tail
-
[ 2283.871125] usbserial_generic 1—1.2:1.2: device disconnected
-
[ 2284.189558] usb 1—1.2: new high—speed USB device number 12 using ehci—pci
-
[ 2284.301056] usb 1—1.2: New USB device found, idVendor=19d2, idProduct=0076
-
[ 2284.301059] usb 1—1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
-
[ 2284.301072] usb 1—1.2: Product: QHSUSB__BULK
-
[ 2284.301073] usb 1—1.2: Manufacturer: Qualcomm CDMA Technologies MSM
-
[ 2284.301421] usbserial_generic 1—1.2:1.0: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 2284.301423] usbserial_generic 1—1.2:1.0: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 2284.301425] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 2284.301508] usb 1—1.2: generic converter now attached to ttyUSB1
-
msi_g qtools # ./qcommand —p1 —e —c «c 3a»
-
—- ответ —
-
00000000: 01 00 00 00 30 00 00 00 02 00 00 00 01 00 00 00 *….0………..*
-
00000010: 00 04 00 00 02 00 00 00 00 00 00 00 00 00 00 00 *…………….*
-
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *…………….*
-
00000030: 01 00 00 00 30 00 00 00 02 00 00 00 01 00 00 00 *….0………..*
-
00000040: 00 04 00 00 02 00 00 00 00 00 00 00 00 00 00 00 *…………….*
-
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *…………….*
-
msi_g qtools # ls /dev/ttyUSB*
-
/dev/ttyUSB1
-
msi_g qtools # ./qdload —p1 —k3 —i
-
Ожидаем пакет Hello от устройства…
-
Идентификатор образа для загрузки: 00000007
-
Загружаем loaders/NPRG9x25p.bin…
-
Передаём загрузчик в устройство…
-
Загрузчик передан успешно
-
Отсылка hello…ok
-
Чипсет: MDM9x25 (f9af0000)
-
Флеш—память: Elite Semiconductor FM6BD4G2GA, NAND 512MiB 1.8V 8—bit
-
Версия протокола: 3
-
Размер сектора: 512 байт
-
Размер страницы: 2048 байт (4 секторов)
-
Размер OOB: 64 байт
-
Тип ECC: BCH, 4 бит
-
Размер ЕСС: 7 байт
-
Размер spare: 4 байт
-
Положение маркера дефектных блоков: user+1d1
-
Общий размер флеш—памяти = 4096 блоков (512 MB)
-
msi_g qtools # qrflash —p1 —x —b0 —l0 —o rawdump.bin
-
bash: qrflash: command not found
-
msi_g qtools # ./qrflash —p1 —x —b0 —l0 —o rawdump.bin
-
Чтение блоков 00000000 — 00000fff
-
Формат данных: 512+16
-
Блок: 00000642 — Badblock
-
Блок: 000007d1 — Badblock
-
Блок: 00000fff
-
msi_g qtools # ./qcommand —p1 —c «c 0b»
-
—- ответ —
-
00000000: 7e 0c 14 3a 7e *~..:~ *
-
msi_g qtools # ls /dev/ttyUSB*
-
/dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
-
msi_g qtools # dmesg | tail
-
[ 3902.650913] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 3902.651008] usb 1—1.2: generic converter now attached to ttyUSB1
-
[ 3902.651065] usbserial_generic 1—1.2:1.1: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 3902.651066] usbserial_generic 1—1.2:1.1: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 3902.651068] usbserial_generic 1—1.2:1.1: generic converter detected
-
[ 3902.651171] usb 1—1.2: generic converter now attached to ttyUSB2
-
[ 3902.651231] usbserial_generic 1—1.2:1.2: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 3902.651232] usbserial_generic 1—1.2:1.2: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 3902.651233] usbserial_generic 1—1.2:1.2: generic converter detected
-
[ 3902.651338] usb 1—1.2: generic converter now attached to ttyUSB3
-
msi_g qtools # ./qcommand —p1 —e —c «c 4b aa 00 00 00»
-
—- ответ —
-
00000000: 4b aa 00 00 00 2a 37 7e *K….*7~ *
-
msi_g qtools # dmesg | tail
-
[ 3902.650913] usbserial_generic 1—1.2:1.0: generic converter detected
-
[ 3902.651008] usb 1—1.2: generic converter now attached to ttyUSB1
-
[ 3902.651065] usbserial_generic 1—1.2:1.1: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 3902.651066] usbserial_generic 1—1.2:1.1: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 3902.651068] usbserial_generic 1—1.2:1.1: generic converter detected
-
[ 3902.651171] usb 1—1.2: generic converter now attached to ttyUSB2
-
[ 3902.651231] usbserial_generic 1—1.2:1.2: The «generic» usb—serial driver is only for testing and one—off prototypes.
-
[ 3902.651232] usbserial_generic 1—1.2:1.2: Tell linux—usb@vger.kernel.org to add your device to a proper driver.
-
[ 3902.651233] usbserial_generic 1—1.2:1.2: generic converter detected
-
[ 3902.651338] usb 1—1.2: generic converter now attached to ttyUSB3
-
msi_g qtools # ls /dev/ttyUSB*
-
/dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
-
msi_g qtools # ./qcommand —p1 —e —c «c 29 02 00»
-
—- ответ —
-
00000000: 29 02 00 59 6a 7e *)..Yj~ *
-
msi_g qtools # ls /dev/ttyUSB*
-
ls: cannot access /dev/ttyUSB*: No such file or directory
-
msi_g qtools # dmesg | tail
-
[ 4123.824702] usb 1—1.2: Manufacturer: ZTE,Incorporated
-
[ 4123.824703] usb 1—1.2: SerialNumber: P680A1ZTED000000
-
[ 4123.841902] rndis_host 1—1.2:1.0 usb0: register ‘rndis_host’ at usb—0000:00:1a.0—1.2, RNDIS device, 36:4b:50:b7:ef:da
-
[ 4123.845765] usb—storage 1—1.2:1.2: USB Mass Storage device detected
-
[ 4123.845988] scsi host9: usb—storage 1—1.2:1.2
-
[ 4124.305706] rndis_host 1—1.2:1.0 enp0s26u1u2: renamed from usb0
-
[ 4124.842072] scsi 9:0:0:0: CD—ROM CWID USB SCSI CD—ROM 2.31 PQ: 0 ANSI: 2
-
[ 4124.845056] sr 9:0:0:0: [sr1] scsi—1 drive
-
[ 4124.845231] sr 9:0:0:0: Attached scsi CD—ROM sr1
-
[ 4124.845309] sr 9:0:0:0: Attached scsi generic sg3 type 5
-
msi_g qtools #
Пожалуйста сделайте патченный загрузчик под этот проц.
Это в смысле MSM7625? А непатченный загрузчик под этот чипсет есть?
Кто ж его знает. У меня нет ни одного устройства на этом чипсете, как мне проверить?
Кстати, а какие вообще распространенные устройства на нем есть?
На этих чипсетах делали ещё и устройства с eMMC в качестве носителя.
snegin:
- Ваш аппарат точно с NAND? Как он называется?
- В каком режиме находится Ваш аппарат? Что доступно — интерфейс PBL, интерфейс SBL?
- Загрузчик, который Вы выложили — без заголовка. Куда делся заголовок? В оригинале, это был NPRG, ENPRG или MPRG? Откуда Вы, вообще, взяли этот код?
- Вы пробовали использовать наш «комплектный» ENPRG7x27Ap.bin ?
to forth32
Я в том плане можно ли пропатчить этот загрузчик.Понятно что без устройства не протестируешь.
Novatel 4082
Huawei E585
to vvevvevve
1.С нандом.Сегодня разберу и посмотрю точно какая там память.
2.Аппарат полностью в рабочем режиме.Есть 2 стандартных порта.
3.Загрузчик вырезан из софта для анлока.Судьба заголовка мне неизвестна.Думаю что изначально это был NPRG.
4.Не провобовал.Заведу в PBL — попробую.
Мне нужно прочитать efs и слить разделы устройства.
Вот, нашёл какое-то чудо: http://vve.su/files/misc/tmp/NPRG7627A.bin .
Попробуйте просто запустить его в исходном виде, непатченный. Думаю, что это нужно делать так:
qdload -pX -k9 -q -a2dc00000 NPRG7627A.bin
Если он запустится и успешно выполнится команда hello, то пропатчим его и включим в комплект.
Да, X — это номер порта интерфейса SBL, после переключения аппарата в download mode.
Ребут после отправки лоадера. Думаю что 7627 и 7625 разные.В 7627 есть пбл.У меня получалось их заводить в него.В 7625 ничего не получилось.
Кажется появилась мысль где загрузчик можно взять.Есть один апдейтер. В понедельник выложу.
Они все разные, в той или иной мере. И PBL есть во всех 7xxx. И ОЗУ на 7×25 может быть размещено в диапазоне от 0 до 40000000, так что 2dc00000 «вписывается» в этот диапазон.
А может, этот ребут возникает на этапе попытки выполнения hello? Попробуйте запускать без ключа -q.
Да, и базовый адрес NANDC в 7×25, абсолютно достоверно, равен a0a00000, как у нас и предполагается.
hello ни при чём.Сразу после отправки загрузчика перезагрузка.В Вашем загрузчике нет NAND,которая стоит в роутере.Я думаю что хелло не даст ответа при отсутствии в загрузчике этой NAND.Хотя перезагружаться он не должен.Встречал я «творения» самсунга и хуавеи у которых встречалось аналогичное.При этом PBL загрузчики на них работали отлично,а вот SPL ребут и все…Но не на всех прошивках — на некоторых все работало. Апдейтеры их шили и конечно при SBL. Как вариант поищу апдейтер под эту модель.
HYNIX_H8BCS0PHOMCP-56M — NAND.
https://yadi.sk/d/u3JK6Sf53GMaRQ
Апдейтер в котором должен быть рабочий загрузчик.При распаковке он скорее всего лежит в файле 505 вместе с прошивкой,но необходимо найти начало и конец.С этим проблемы.
это же хуавей, в ресурсах обычный их app.
старый формат, распковывается скрипом от 2009 года,
split_updata.pl, # Author(s) : McSpoon, # Description : Unpack a Huawei U8220 ‘UPDATA.APP’ file.
но смысла нет, никаких бутов там нет, они в хуавея не используются.
Понятно.С хуавеями не знаком.Есть и другие загрузчики под 7627.Одна надежда на PBL.А он там точно есть?
hello ни при чём.Сразу после отправки загрузчика перезагрузка.
Если запускаете qdload с ключом -q или -i, то hello отправляется автоматически. После запуска загрузчика, конечно. Но разумнее в таких случаях запускать утилиту без этих ключей.
В Вашем загрузчике нет NAND,которая стоит в роутере.Я думаю что хелло не даст ответа при отсутствии в загрузчике этой NAND
Даст ответ. «Unrecognized flash» или вроде того.
Есть и другие загрузчики под 7627
Ну так пробуйте их запускать, проверяйте. Чего Вы ждёте?
Одна надежда на PBL.А он там точно есть?
Да какая разница? Если он даже не называется PBL, всё равно в ПЗУ платформы есть код, который умеет инициализировать железо, загружать и запускать ENPRG.
Ещё загрузчики.
Ну и пробуйте их запускать. Смотрите адреса в заголовках (они там у Вас все разные) и задавайте в ключе -a: (слово по смещению 0xc в файле) — 0x28.
Кстати, тот ENPRG7x27Ap.bin в комплекте — это, по идентификатору образа, NPRG, а не ENPRG. Так что его можно тоже пробовать грузить (по адресу 600000).
Загрузчик отправлен.Дальше отсылка hello:
Отсылка hello… повторный hello возвратил ошибку!
00000000: 7e 03 00 03 33 1b 7e *…3. *
Ребут.
Это о ENPRG7x27Ap.bin.
Видите, он даже запускается и что-то успевает ответить.
Запускайте qdload без hello, а hello потом пробуйте отправить в интерактивном режиме qcommand, командой is .
Или хотя бы просто без параметров — посмотреть, что ответит: команда c 0 в интерактивном режиме.
по коду ошибки, похоже что после отправки загрузчика, ему забыли передать управление.
поэтому телефон на 01 и отвечает 03 с кодом 0003 — неправильная длина.
(NAK response packet+Invalid length)
потому что 01 это еще не hello, a пока write.
—- ответ —
00000000: 7e 03 00 06 9e 4c 7e *….L *
Что я делаю не так?
ДМ — qdload -p21 -k9 -a600000 loadersENPRG7x27Ap.bin
С остальными перезагрузка.
Что я делаю не так?
Я ведь вижу только ответ, но не вижу — что и на что отвечает. Покажите полный сеанс загрузки NPRG и выполнения команды.
попробуйте просто профлешить другое похожее устройство, и снифером посмотреть как все устроенно на квалкоме. потом сравнить оба лога, и все станет намного понятнее. пока выходит что у вас все буты не те. или в ребут или не стартуют. может вы не туда грузите, или не то.
может есть тема на 4pda, или еще где, по вашему устройству на 7625, или не на 7625))).
думаю на многих форумах — есть ребята, которые по удаленке — и бут нужный найдут, и допилят его, и помогут вам поднять устройство.
потому что 01 это еще не hello a пока white.
Это в DMSS команда 01 = Write, а в SDP это Hello. Он же не SBL эту команду отправляет, а загрузчику. Я надеюсь, во всяком случае… Почему и прошу показать полную картину сессии.
ARMPRG не может ответить 03, там ответы четные восновном.
значит OEMSBL не стартонул ARMPRG, и отвечает сам.
ARMPRG кривой или адресс, х.з.
может канешно ответ на 05/GO — чем-то поможет,
но в случае перегрузки — он не поможет, а там где не стартует, явно дело в буте.
подозреваю производитель устройства, версии с DIAG/ATI, дамп ram, и еще что, было бы намного информативнее чем фраз бут для 7625.
да, там сразу в cmm написанно что Huawei E5832
7625A-13553008-SNCAALZM
лет пять назад, у меня был его близкий родственник, huawei ec5825, в oemsbl
7625A-135520-SNCABLUM
я тогда нашел пару NPRG7625 в гугле, от acer e101 и wellcom a66
но вроде у меня тогда ничего не получилось, но уже не помю с чем.
толи с адресом загрузки, толи с дописыванием в бут своего флешера.
адресс загрузки в тех бутах был 0x05F00000, а qtools тогда ее небыло.
тут не помню, но на старых платформах адрес мог быть разный,
иногда нужно было сделать «rebase» чужому загрузчику,
ну поправить скриптом все смещения в файле.
вот линк на те буты. может там только дрова придется самому допилить.
https://www.4shared.com/rar/T_jjXg4Qei/nprg7625.html
acer e101 0502_9002 NPRG7625.hex
acer e101 05C6_9002 NPRG7625.hex
wellcom a66 AQ4-0-0360-NPRG7625.hex
wellcom a66 AQ4-0-0370-NPRG7625.hex
В любом случае огромное спасибо.О результатах напишу.
судя по 80-VP758, в msm7225(думаю всех 7×25 тоже) — отсутствует PBL. тоесть загрузчик в процессоре.
и вообще по большинству пунктов *Cannot be supported, due to hardware issue.
тоесть, в отличии от новых процов, qtools на данном устройстве, пригодится в очень редких ситуациях,
скорее в одной наверное, переписать/поправить OEMINFO, на рабочем устройстве.
востановить с довндоада — скорее всего можно стандартным флешером,
а если полностью труп, то только jtag, а там пиши что угодно.
отсутствует PBL. тоесть загрузчик в процессоре
Да не отсутствует он — как же без него? Просто из-за какой-то ошибки у них не получилось организовать загрузку кода. Даже не могу представить — какая это могла бы быть ошибка, ведь сама по себе и флешка пишется, и порт USB работает. А одновременно эти действия сразу после запуска почему-то не получается.
То есть, да: особого смысла что-то читать из него нет. Разве только для того, чтобы потом c JTAG-ом записать.
наверное первой фразой я должен написать спасибо,
и вам/тебе, и forth32, за помощь в других ситуациях, не связанных с qtools.
у меня нет большого опыта, но PBL в квалкомах появился «недавно».
когда другие процы уже грузились с sd/usb/232, может что забыл,
а тот-же i7 — наверняка до сих пор биос просит.
на этой пасочке, думаю это просто квалкомовский download,
после dmss комманды 3a или проблем с amss(на lte — dsp2)
ИМНО, нет тут никаких PBL по архитектуре,
и по топику, armprg все-равно пока левак грузился.
и грузился через странный OEMSBL, которому armprg не нужны по определению.
- У меня аналогичная проблема (mf677).
qdload -p49 -k1 -i -t -d50 ENPRG8200p.bin
Найден блок идентификации загрузчика
Не указан тип чипсета — полная инициализация невозможна
Файл загрузчика: ENPRG8200p.bin
Адрес загрузки: 58020000
Размер файла: 162084
Загружено: 162084
Запуск загрузчика…ok
Отсылка hello… повторный hello возвратил ошибку!
00000000: 15 01 51 43 4f 4d 20 66 61 73 74 20 64 6f 77 6e ..QCOM fast down
00000010: 6c a8 8b 7e *l..~
- Ну и гораздо более тривиальная:
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
Иногда в веб-приложениях появляется необходимость выполнить сложные ресурсоемкие задачи, которые не могут быть умещены в коротком временном интервале HTTP запроса. В этом случае на помощь приходят очереди. Основная идея очередей – избежать выполнения ресурсоемких задач непосредственно после отправки запроса. Вместо этого задача ставится в очередь для последующего выполнения в асинхронном режиме. Т.е. при получении запроса от клиента мы инкапсулируем задачу как сообщение и отправляем его в очередь, а уже обработчик очереди достает сообщения в порядке их следования и обрабатывает надлежащим образом. Забегая вперед, скажу, что возможен режим работы очередей, когда при наличии нескольких копий обработчика, следующая задач будет поступать на свободный обработчик. Таким образом достигается распараллеливание выполнения задач.
В данном разделе рассматривается работа с очередями, использующими сервер сообщений RabbitMQ. Сервер RabbitMQ по сути является менеджером очередей, который имеет следующие преимущества:
- в случае некорректного завершения работы сервера, данные в очереди не теряются. И при последующем запуске обработка продолжается с того места, где был обрыв;
- распределить задачи на несколько очередей, т.е. создать распараллеливание на уровне сообщений
- если результат обработки не удовлетворяет, задачу можно послать в очередь повторно;
- существует несколько режимов работы очереди: рассылка типа точка-точка(direct), рассылка сообщений по шаблону(topic), широковещательная рассылка сообщений(fanout);
- возможность синхронизировать работу клиента и сервера, своего рода реализация RPC
- количество хранимых в очереди сообщений неограничено
- сервер сообщений может быть расположен удаленно как по отношению к продюсеру, так и по отношению к консьюмеру.
В туториалах будут приведены примеры для всех вышеперечисленных вариантов. За основу взяты туториалы с официального сайта, дополнены и реализованы на PHP для RabbitMQ.
RabbitMQ испозует протокол AMQP. Чтобы использовть RabbitMQ необходимо поставить клиентскую и серверную части.
Установка сервера
Для установки расширения AMQP для PHP необходимо сначала установить RabbitMQ Server
Добавим следующию строку в файл /etc/apt/sources.list
1
|
|
1 2 3 4 |
|
Установка клиента
Выбираем нужную библиотеку и устанавливаем http://www.rabbitmq.com/devtools.html.
Наиболее популярны php-amqplib и PECL AMQP library
Базовые понятия
В RabbitMQ используются следующий обозначения. Продюсер – программа, которая посылает сообщения. Будем обозначать его так
Брокер(очередь) – собственно просто буфер в памяти без каких-либо ограничений на количество хранимых сообщений. В одну и ту же очередь могут отсылать сообщения несколько продюсеров, так же как несколько консьюмеров могут пытаться получить сообщения из одной и той же очереди. Очередь будет обозначена так(сверху указано имя очереди)
Консьюмер(получатель) – программа, которая принимает сообщения из очереди. Будем обозначать его так
Здесь важно отметить, что продюсер, консьюмер и брокер могут быть расположены на различных машинах, более того, в большинстве случаев это именно так.
Первый скрипт работы с очередью, своего рода “Hello world”, будет отсылать текстовое сообщение с клиента, принимать его на сервере и выводить на экран.
Т.е. схема работы следующая: Первое, что надо сделать, это установить соединение с сервером RabbitMQ. Соединение устанавливается командами
1 2 |
|
где
1 2 3 4 5 6 7 |
|
это дефолтные значения. Если достаточно дефолтного значения любого из этих параметров, то его можно опустить. И, напротив, если, к примеру, нужно подключиться к другой машине, в параметре host необходимо указать ее имя или ip адрес.
Используя коннект можно получить объект для канала
1
|
|
На основе полученного канала создаем обменник
1 2 3 4 5 |
|
и, собственно, саму очередь
1 2 3 4 |
|
Когда обменник и очередь готовы, их можно связать по ключу
1
|
|
Объявлять очередь и связывать ее с обменником можно как на продюсере, так и на консьюмере. Все зависит от того, что первым будет запускаться. Если неизвестно, то, возможно следует объявить и там и там. При этом имена очередей должны совпадать. Если имена очередей совпадают, то количество объявлений не имеет значения. Очередь с определенным именем может быть только одна.
Стоит отметить, что сообщение не может быть опубликовано напрямую в очередь, оно должно проходить через обменник. Собственно посредством обменника оно и публикуется
$result = $exchange->publish(json_encode(“Hello world!”), “foo_key”);
После того как сообщение отослано, коннект можно разорвать.
1
|
|
Получатель также должен выполнить ту же последовательность
– приконнектиться к серверу сообщений;
– создать канал;
– объявить обменник;
– объявить очередь;
– связать очередь с обменником по ключу
Последние два действия, как упоминалось выше, не обязательны. Теперь можно начать прослушивать очередь
1 2 3 4 5 6 |
|
Здесь методу get в качетсве параметра передается константа ARMQ_AUTOACK, которая оповещает сервер сообщений о том, что данное сообщение получено. Это самый простой способ удалить сообщение из очереди. Однако в данном случае в случае неудачной обработки сообщения, вернуть повторно его в очередь нельзя.
Таким образом, получаем два скрипта
send.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
receiver.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Распределенные очереди
Основная идея заключается в следующем. Допустим нужно обработать видео файл, чтобы получить на выходе три сконвертированных файла в различные форматы, информацию о метаданных и создать иконки для этого видеофайла. Т.е. получаем 5 задач, три из которых довольно тяжеловесные(конвертация), одна легкая(получение метаданных) и одна средняя(создание иконок). При этом все эти задачи являются независимыми друг от друга. Таким образом, можно выполнять их одновременно, т.е. распараллелить обработку очереди на уровне сообщений(пункт 2). Для этого при объявлении обменника необходимо установить ему тип AMQP_EX_TYPE_FANOUT. Тогда все сообщения, посылаемые в указанный обменник, независимо от имени очереди и ключа роутера, будут прослушиваться всеми запущенными копиями консьюмера. Т.е. каждое следующее сообщение будет отсылаться на следующий свободный консьюмер. В нашем случае их должно быть пять. Такой способ обработки получил название round-robin dispathing. Обратите внимание, что при отправке продюсером и при получении консьюмером используется одна и та же очередь.
Оповещение (acknowledgment)
Некоторые задачи могут выполняться довольно долго. И неизвестно, что может произойти с сервером в этот момент: сервер может перезагрузиться, либо задача может зависнуть или завершится фатальной ошибкой. В первом туториале оповещение было отключено путем передачи параметра AMQP_AUTOACK в метод get(). В этом случае сообщения удаляются из памяти сразу после выполнения метода get и в случае ошибки, случившейся во время обработки, не вернутся в очередь. Чтобы избежать этого, не будем передавать константу AMQP_AUTOACK в метод get. Вместо этого по завершению обработки вызовем метод ack(), который уведомит брокер о том, что сообщение успешно обработано и его можно удалить из памяти. В противном случае RabbitMQ понимает, что сообщение не обратботано и перенаправляет его другому свободному консьюмеру. Однако здесь стоит отметить один важный момент. Перенаправленные сообщения не будут обрабатываться до того пока консьюмер не отконнектится и приконнектится заново к брокеру. Если необходимо заново обработать сообщение в рамках того же коннекта к серверу сообщений, то необходимо вызвать метод nack() с флагом AMQP_REQUEUE, который поставит неудачно обработанную задачу обратно в очередь и уведомит брокер о том, что эта задача должна быть вновь обработана.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Распростаненная ошибка – при включенном оповещении не подтверждать корректно обработанные задачи(сообщения). В этом случае при каждом новом коннекте, все уже обработанные задачи будут поступать заново на обработку. Процесс будет выглядеть как беспорядочная повторная отпарка сообщений, что в конечном итоге приведет к переполнению памяти. Отследить такую ситуацию можно путем использования нативного инструмента сервера сообщений rabbitmqctl
1 2 3 4 |
|
Жизнеспособность сообщений (durability)
В предыдущем параграфе мы рассмотрели как не потерять сообщение в очереди путем повторной отправки его в очередь. Тем не менее сообщение может быть потеряно в случае если сервер сообщений был неожиданно остановлен. Чтобы этого избежать, очередь должна быть создана с флагом AMQP_DURABLE.
1 2 3 4 |
|
Если очередь ‘hello’ уже была объявлена, то данный код вызовет ошибку, поскольку один раз объявленную очередь нельзя объявить повторно с другими параметрами. Из этой ситуации есть два выхода, либо обнулить все очереди как сказано здесь, либо создать новую очередь с неиспользуемым именем. Посмотреть список очередей можно спопособом упомянутым в предыдущем параграфе.
Установка флага AMQP_DURABLE не гарантирует стопроцентную сохранность сообщений в очереди. Несмотря на то, что таким спопосбом мы указываем RabbitMQ сохранять сообщения на диске, существует мертвая зона после получения соощения, когда оно уже в памяти, но еще не сохранено на диске. В этот момент, в случае не предвиденной ситуации, оно может быть утеряно из памяти. Для нашего простого примера таких гарантий достаточно, но если необходимо добиться высоких гарантий получения сообщения, то следует использовать транзакции.
Все вместе
Для примера распределения сообщений между очередями нам понадобится функция, имитирующая загруженность системы. Для этого мы используем обычный таймер
1 2 3 4 5 6 |
|
Полный код продюсера (send.php) будет выглядеть так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Консьюмер (receive.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Обратите внимание, что очереди создаются с абсолютно идентичными параметрами. Как уже было сказано, повторное создание очереди с иными параметрами вызовет исключение. Также стоит отметить, что если вы уверены, что консьюмер будет запускаться первым, то создание очереди в продюсере не обязательно.
Теперь, если запустить несколько копий консьюмера, то можно будет видеть как между ними распределяются сообщения. Предположим, что мы отправили 8 сообщений в очередь, т.е. запустили скрипт send.php 8 раз. После этого запускаем в двух разных терминалах по консьюмеру
Вывод в первом терминале
1 2 3 4 5 6 7 |
|
Вывод во втором терминале
1 2 3 4 5 6 7 8 9 10 11 |
|
Как видно сообщения распределились по мере нагрузки консьюмера.
Рассылка публикаций
В предыдущем уроке мы распределяли сообщения между всеми консьюмерами. В данном уроке, наоборот, будем отсылать все сообщения из очереди на все консьюмеры. Такой шаблон известен как “публичная рассылка”(publish subscribe). Такое поведение может быть полезно, к примеру, при создании логирования с одновременным выводом сообщения в терминал. Т.е. один консьюмер получает сообщение и сохраняет его на диска, в то время как другой выводит это сообщение на экране.
В предыдущих разделах мы не заостряли внимание на обменнике(exchanger). На самом деле продюсер никогда не отправляет сообщения непосредственно в очередь. Он размещает их в обменнике. Собственно говоря, продюсер и не знает было ли сообщение доставлено в очередь или нет. Обменник представляет собой простую вещь – он получает сообщения от продюсера и отправляет(публикует) их в очередь. При этом обменник четко знает по какому алгоритму он работает:
- отправляет сообщение во все очереди с четко заданным именем на все консьюмеры, обрабатывающими эту очередь(direct)
- отправляет сообщение во все очереди и распределяет сообщение между консьюмерами, обрабатывающими очередь с одинаковым именем(fanout)
- отправляет сообщение во все очереди с именем, удовлетворяющим шаблону(topic)
- отклоняет сообщение
В нашем примере будем использовть тип обменника fanout.
1 2 3 |
|
Для этой цели продюсер не создает именованную очередь. Консьюмер же, в свою очередь, создает анонимную очередь, в которую принимает сообщения продюсера. При таком подходе каждый консьюмер будет принимать все сообщения продюсера.
Анонимные очереди
В предыдущем уроке у нас была необходимость рассылки сообщений в очереди с одинаковыми именами для возможности распределения сообщений между продюсерами и консьюмерами. Для достижения же текущей цели нам нужны выполнить две вещи. Во-первых, нам нужны очереди с различными именами. Во-вторых, созданные очереди должны автоматически удаляться после окончания работы скрипта.
Для создания рандомного имени, можно воспользоваться одной из функций генерации хеша, к примеру sha1 или md5. Или же оставить эту задачу серверу сообщений. Если при объявлении очереди не устанавливать ей имя, то RabbitMQ сам задаст рандомное имя очереди.
Для возможности автоматического удаления очереди, при ее создании нужно задать флаги AMQP_IFUNUSED, AMQP_AUTODELETE.
1
|
|
Связывание (bindings)
Мы уже создали обменник с типо fanout и очередь. Теперь нужно сказать обменнику, что он должен публиковать сообщения имеено в эту очередь. Это отношение называется связыванием (binding)
1
|
|
Здесь второй параметр – ключ, по которому связывается обменник и очередь. В данном случае он может быть любой строкой, поскольку его значение игнорируется в случае, если обменник имеет тип fanout.
Все вместе
Поскольку в данном примере мы имеем дело с анонимными очередями, создаваться они должны на стороне консьюмера, и консьюмер, соответственно, должен быть запущен первым. Из продюсера создание очередей удаляется.
send.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
|
Селективная рассылка
В предыдущем уроке была рассмотрена возможность отсылки сообщений нескольким получателям.В данном уроке мы рассмотрим как отсылать сообщения в четко определенные очереди. Такая возможность может понадобиться, к примеру, если мы не хотим сохранять все сообщения на диске, а только критический. В то время как на экран будут выводиться все сообщения.
Связывание (bindings)
Связываение уже упоминалось в предыдущем уроке
1
|
|
Повторимся, оно нужно, чтобы сказать обменнику, что он должен публиковать сообщения имеено в эту очередь.
В методе bind() имеется второй параметр – ключ(routingKey), по которому связывается обменник и очередь. В данном уроке он будет играть основную роль. Стоит также напомнить, что ключ напрямую зависит от типа обменника. Так для обменника с типом fanout, он просто игнорируется.
К примеру, если нужно связать обменник и очередь по ключу ‘failure_messages’
1
|
|
Прямое связывание (точка-точка)
В предыдущем уроке система логирования выполняла широковещательную рассылку всем консьюмерам. Теперь мы хотим расширить это поведение путем добавления фильтра сообщений по их важности. К примеру, критические ошибки писать на диск, а предупреждения только выводить на экран с целью экономии дискового пространтсва. Ранее мы использовали обменник с типом fanout, который не позволяет это сделать. Сейчас мы используем другой тип обменника – direct, который отправляет сообщения только тем очередям, routingKey которых совпадает с routingKey сообщения. Это поведение проиллюстрировано на изображении
На изображении можно видеть обменник X с типом direct, который связан с очередью Q1 по ключу failure, и с очередью Q2 по ключам notice и warning. В данном случае все сообщения с ключем failure будут отсылаться только в очередь Q1, а все сообщения с ключами notice и warning будут отсылаться в очередь Q2. Сообщения, ключи которые не совпадают с выше указанными, будут игнорироваться всеми очередями.
Множественная связь
Вполне возможно несколько очередей связать с обменником по одному и тому же ключу. Т.е. для нашего примера мы вполне можем установить связь по ключу notice между обменником и очередью Q1 и между обменником и очередью Q2. В таком случае сообщения с ключем notice будут отсылаться на обе очереди, т.е. получаем поведение аналогичное обменнику с типом fanout.
Отправка сообщений
Для отправки сообщений способом точка-точка обменник должен быть создан с типом direct, который сооветствует константе AMQP_EX_TYPE_DIRECT.
1 2 3 4 |
|
После чего возможна публикация сообщений по ключу
1
|
|
Получение сообщений
Получение сообщений ничем не отличается от предыдущего урока, за исключением того, что нам нужно связать обменник с очередью по каждому типу
1 2 3 4 5 6 |
|
Все вместе
Как и в предыдущем уроке, поскольку в данном примере мы имеем дело с анонимными очередями, создаваться они должны на стороне консьюмера, и консьюмер, соответственно, должен быть запущен первым. Из продюсера создание очередей удаляется.
Продюсер (send.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
|
Рассылка по шаблону
В предыдущем уроке мы улучшили нашу систему логирования путем использования обменников с типом direct, создав возможность получать сообщения выборочно. Следующим этапом будет создание системы, позволяющей логировать по множеству критериев. Допустим мы хотим разделить обработаку логирования основываясь не только на важности сообщений, но и по устройствам, вызвавшим эту ошибку. Это предоставило бы нам большую гибкость – к примеру, можно было бы выделить обработку логов для критических ошибок, инициированных кроном, и отдельно выделить обработку логов всех сообщений от ядра системы. Для имплементации такой возможности нам неоходимо нечто большее, чем прямая рассылка сообщений (рассылка по методу точка-точка).
Связывание по шаблону
Для выполнения связи по шалбону обменник должен иметь тип topic, который определяется константой AMQP_EX_TYPE_TOPIC. Ключи routingKey составляются из слова, следующих через точку, например, “logs.devices.kernel.notice”, “logs.devices.cron”. Максимальная длина такого ключа может составлять 255 символов. Логика доставки сообщений по ключу схожа с логикой для обменников с типом direct – сообщения с определенным ключем будут доставлены в очереди с соответствующим ключем. Но есть одна большая разница. Ключи, используемые для связи по шаблону, могут содержать два специальных символа:
- * , соответствует строго одному слову;
- # , соответствует любому количеству слов, в том числе и отсутствию слов;
Например, имеем следующие связи
*.orange.*
*.*.rabbit
lazy.#
Первое слово описывает скорость, второе – цвет и третье – вид животного, т.е. [speed][color][species]. Мы создали три связи: очередь Q1 связали по ключу “.orange.” и очередь Q2 – по ключам “..rabbit” и “lazy.#”. Таким образом, можно сказать, что очередь Q1 рассматривает всех оранжевых животных, а очередь Q2 – всех зайцев и всех медленных животных.
Рассмотрим несколько примеров:
- “quick.orange.rabbit” – в обе очереди
- “lazy.orange.elephant” – в обе очереди
- “quick.orange.fox” – только в 1-ую
- “lazy.brown.fox” – только во 2-ую
- “quick.brown.fox” – будет отброшена
- “quick.orange.male.fox” – будет отброшена
- “lazy.orange.male.fox” – только во 2-ую
Обменник с типом topic может повторять поведение обменника с типом fanout, если с ним связать очередь по ключу “#”. Если в ключе не испльзовать специальных символов, то такой обменник будет соответствовать обменнику с типом direct.
Отправка сообщений
Для отправки сообщений по шаблону обменник должен быть создан с типом topic, который сооветствует константе AMQP_EX_TYPE_TOPIC.
1 2 3 4 |
|
После чего возможна публикация сообщений по ключу
1
|
|
Получение сообщений
Получение сообщений ничем не отличается от предыдущего урока
1 2 3 4 5 6 |
|
Все вместе
Как и в предыдущем уроке, поскольку в данном примере мы имеем дело с анонимными очередями, создаваться они должны на стороне консьюмера, и консьюмер, соответственно, должен быть запущен первым. Из продюсера создание очередей удаляется.
Продюсер(send.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
|
Реализация RPC шаблона
Во втором уроке была реализована очередь, которая распределяла нагрузку между всеми имеющимися консьюмерами. Но, что если нам нужно получить результат от обработчика очереди. Такой подход известен как вызов удаленных процедур или RPC(remote procedure call). В этом уроке будет реализована модель RPC с использованием очереди сообщений RabbitMQ. Конечно, такой подход предполагает, что обработка не должна занимать много времени. Для реализации примера наша функция обработчик будет изменять сообщение “message before” на “message after”.
В целом, реализация RPC посредством RabbitMQ довольно проста. Клиент отправляет сообщение, а сервере отвечает. Для обработки ответа сервера, необходимо создать callback очередь. Чтобы узнать какая callback очередь ожидает ответа, мы должны в запросе послать ее имя. Для этого на продюсере создается анонимная очередь и ее имя добавляется в параметры запроса
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Обратите внимание, что callback очередь создается с флагом AMQP_EXCLUSIVE, что означает, что только один консьюмер может слушать эту очередь.
Correlation ID
В методе, представленном выше, мы предполагаем создавать callback очередь для каждого RPC запроса. Поскольку нельзя однозначно по имени очереди определить какому запросу принадлежит ответ, в запрос также добавляется параметр correlationId, который имеет уникальное значение для каждого запроса. Позже, когда мы получим ответ, мы сможем сравнить его correlationId со значением, переданным вместе с запросом. И в случае их несовпадения просто отбросить полученный ответ.
Итоговый план действий
- клиент создает анонимную эксклюзивную callback очередь
- клиент отсылает запрос с двумя параметрами:
replyTo – имя callback очереди
corralationId – уникальное значение для каждого запроса - запрос отправляется в именованную очередь, к примеру, с именем rpc_queue
- RPC воркер (RPC сервер) ждет запрос от этой очереди и когда запрос появляется, обрабатывает его и шлет ответ обратно клиенту, используя имя callback очереди в качестве роутер-ключа
- клиент слушает callback очередь и когда сообщение появляется, сверяет correlationId. Если значение этого свойства из полученного сообщения соответствует ранее сформированном значению, ответ обрабатывается приложением.
Все вместе
Функция обработки сообщения на стороне сервера выглядит следующим образом
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Функция обработки сообщения на стороне клиента
1 2 3 4 |
|
Продюсер(send.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
|
forth32 / qtools
Goto Github
PK
View Code? Open in Web Editor
NEW
125.0
58.0
6.74 MB
Набор инструментов для работы с flash модемов на чипсете qualcom
License: GNU General Public License v3.0
C 92.85%
Shell 1.28%
Makefile 0.47%
C++ 2.83%
qtools’s People
qtools’s Issues
qrflash possibility to add save ptable.bin while using -m
Hello
is it possible to save the partition table when we use qrflash -m to view the partition table directly from the flash into a file current-ptable.bin ? thanks for support
qtools_win>qrflash -p22 -m``
# start size A0 A1 A2 F # format ------ Name ------
============================================================
00 0 00000a ff 01 00 00 LNX 0:SBL
01 a 00000a ff 01 ff 00 LNX 0:MIBIB
02 14 00002c ff 01 00 00 LNX 0:EFS2
03 40 00001b ff 01 00 00 LNX 0:SDI
04 5b 00001b ff 01 00 00 LNX 0:TZ
05 76 000006 ff 01 00 00 LNX 0:MBA
06 7c 00001b ff 01 00 00 LNX 0:RPM
07 97 000196 ff 01 00 00 LNX 0:QDSP
08 22d 000054 ff 01 00 00 LNX 0:ADSP
09 281 000032 ff 01 00 00 LNX 0:ZTEFLAG
10 2b3 0000a2 ff 01 00 00 LNX 0:BSPFOTA
11 355 00002b ff 01 00 00 LNX 0:NVBAK
12 380 000007 ff 01 00 00 LNX 0:APPSBL
13 387 000052 ff 01 00 00 LNX 0:APPS
14 3d9 000196 ff 01 00 00 LNX 0:SCRUB
15 56f 00000b ff 01 00 00 LNX 0:MISC
16 57a 000159 ff 01 00 00 LNX 0:CACHE
17 6d3 00012c ff 01 00 00 LNX 0:SYSTEM
18 7ff 000279 ff 01 00 00 LNX 0:USERDATA
19 a78 000053 ff 01 00 00 LNX 0:RECOVERY
20 acb 00000b ff 01 00 00 LNX 0:FOTA
21 ad6 0000a5 ff 01 00 00 LNX 0:ZTEDATA
22 b7b 0000ad ff 01 00 00 LNX 0:ZTEFILE
23 c28 0003d8 ff 01 00 00 LNX 0:RECOVERYFS
============================================================
Section table version: 4
*NEW* NRPG ENPRG for ZTE..
ZTE_NPRG_ENPRG.zip
Found these in MF920V firmware update.
md5 is different from the files in loaders directory.
—
THIS ISSUE WAS DELETED
THIS ISSUE WAS DELETED
Translate Readme to english
raw dump mdm9x25 badblocks detected
Hello
i’m performing raw dumpe write to mdm9x25 device it detects badblocks then device is unable to start and stays on download mode qualcomm hs-usb qdloader 9008 , is there anyway to fix the badblocks by erasing or any other solution ?
thanks for help
`
qwdirect -p22
-fi -b0 rawdump-Djezzy-MF910+-B03.bin
Write from file rawdump-B01.bin, starter unit 000, the size 1000
Recording mode: raw image without calculation of ЕСС
Data format: 512+16
Block: 0f39 Page: 3f
Block f3a defective — skipping
Block: 0f99 Page: 3f
Block f9a defective — skipping
Block: 0fb9 Page: 3f
Block fba defective — skipping
Block: 0fc9 Page: 3f
Block fca defective — skipping
Block: 0fd9 Page: 3f
Block fda defective — skipping
Block: 0fe9 Page: 3f
Block fea defective — skipping
Block feb defective — skipping
Block: 0ff9 Page: 3f
Block ffa defective — skipping
Block ffb defective — skipping
Block: 1008 Page: 3f
qcommand -p22 -c «c 0b»
—- ответ —
00000000: 7e 0c 14 3a 7e *..: *
`
Использована неинициализированная локальная переменная «cwsize»
qtoolsqrflash.c (253)
FM6BD4G2GA для ENPRG9x45p.bin/NPRG9x45p.bin
Пожалуйста добавьте флешку FM6BD4G2GA.Она есть в загрузчике для 9Х25.
respected sir ! huawei ec315-5 mdn repair
Teacher
i have huawei ec315-5 device i want to repair his esn
qpst tool can reapair esn?
or another metod plz share on our project
i will thanksfull 2 u.
add MSM8996 chipset support
Hi! I’m trying to use qdload with my leEco x829 (Snapdragon 820 MSM8996) and noticed that it’s not listed in chipset list, also calling command ./qdload -p /dev/ttyUSB0 -k MSM8996 gives - Неверный код чипсета error. Same issue with any of listed chipset codes. Am i doing something wrong or this chipset is unsupported for now?
Thank you
Формат файла загрузчика
Добрый день. Не нашёл места где можно было бы задать вопрос по проекту. Я так понимаю что все вопросы писать можно сюда. Извините если ошибся.
Я хотел спросить о формате файлов загрузчиков. В проекте они все (почти) hex. Или BIN. У меня телефон на qualcomm, но к нему в заводской прошивке загрузчик идёт в ELF формате. ARM little indean. Его понимает QPTS. Через него шью когда надо бывает восстановить кирпич. Qtools не принимает такой загрузчик. Да мне его и не про патчить даже.
HEX мне нужно как то перекомпилировать из ELF? Или это вообще разные вещи и нужно искать отдельный загрузчик в hex формате. И ELF никакого отношения к этому не имеет?
И такой вопрос. В телефоне есть какая то проверка на валидность загрузчика? Типа контрольной суммы? Я пробовал свой загрузчик декомпилировать и вносить небольшие изменения. Но телефон после попытки загрузить в него изменённый загрузчик переставал работать и переходил в режим загрузки пока в него не загружался оригинальный файл. В том что изменял корректно и не запорол файл уверен на 78% 
SM-N97xx SM-N976V QDLoader 9008 Qualcomm Streaming mode?
MDM9207 MSM8909
MDM9215 (SIM7100E)
Здравствуйте, товарищи разработчики.
Спасибо за Ваш труд, набор утилит очень полезный.
Теперь, если позволите, к проблеме.
Имеется модем SIM7100E PCI-E, построенный на базе Qualcomm MDM9215.
- Если модем жив-здоров, то его прошивка легко и просто сливается по инструкции уважаемого @vvevvevve . Выглядит это так:
./qdload -p /dev/ttyUSB0 -i loaders/NPRG9x15p.bin
Найден блок идентификации загрузчика
Файл загрузчика: loaders/NPRG9x15p.bin
Адрес загрузки: 41700000
Размер файла: 63816
Загружено: 63816
Запуск загрузчика...ok
Версия HELLO-протокола: 3
Чипсет: MDM9x15
Базовый адрес NAND-контроллера: 1b400000
Флеш-память: Elite Semiconductor FM6AD2G1GA, NAND 256MiB 1.8V 8-bit
Размер сектора: 512 байт
Размер страницы: 2048 байт (4 секторов)
Число страниц в блоке: 64
Размер OOB: 64 байт
Тип ECC: R-S, 4 бит
Размер ЕСС: 10 байт
Размер spare: 5 байт
Положение маркера дефектных блоков: user+1d1
Общий размер флеш-памяти = 2048 блоков (256 MB)
./qrflash -p /dev/ttyUSB0 -m
00 0 00000a ff ff ff 00 STD 0:MIBIB
01 a 00001b ff ff 00 00 STD 0:SBL2
02 25 00001b ff ff 00 00 STD 0:RPM
03 40 000053 ff ff ff 00 STD 0:EFS2
04 93 00001f ff 01 00 00 LNX 0:DSP1
05 b2 000052 ff 01 00 00 LNX 0:DSP3
06 104 000196 ff 01 00 00 LNX 0:DSP2
07 29a 000062 ff ff 00 00 STD 0:APPSBL
08 2fc 000052 ff ff 00 00 STD 0:APPS
09 34e 000203 ff ff ff 00 STD 0:CACHE
10 551 00000b ff ff ff 00 STD 0:MISC
11 55c 000053 ff ff ff 00 STD 0:RECOVERY
12 5af 00000b ff ff ff 00 STD 0:FOTA
13 5ba 0000b7 ff ff ff 00 STD 0:RECOVERYFS
14 671 000144 ff ff ff 00 STD 0:SYSTEM
15 7b5 00004b ff ff ff 00 STD 0:USERDATA
qrflash -p3 -x -b0 -l0 -o rawdump.bin
Чтение блоков 00000000 - 000007ff
Формат данных: 512+16
Блок: 000007ff
Первые 2 команды запускались из-под Linux, но это не суть (кстати, под Linux есть проблемы, но это отдельная тема). Таким образом, патченный NPRG-загрузчик спокойно попадает на модем и выполняет свою работу.
- Проблема возникает, когда я пытаюсь прошить модем, находящийся в аварийном Download Mode (SimTech HS-USB QDLoader 9008). Не могу загрузить ENPRG-загрузчик никак. Выглядит это как-то так:
qdload.exe -p9 -k4 -a 2A000000 -i loadersENPRG9x15p.bin
Файл загрузчика: loadersENPRG9x15p.bin
Адрес загрузки: 2a000000
Размер файла: 75776
Загружено: 75776
Запуск загрузчика...ok
Отсылка hello... повторный hello возвратил ошибку!
00000000: 7e 0d 08 00 00 00 55 6e 72 65 63 6f 67 6e 69 7a *~.....Unrecogniz*
00000010: 65 64 20 66 6c 61 73 68 20 64 65 76 69 63 65 53 *ed flash deviceS*
00000020: b2 7e *.~ *
«Тут — помню, тут — не помню». Там флешку узнает, а тут — не узнает. На всякий случай предупреждаю, что все эксперименты проводятся на здоровом модеме со здоровой флешкой (с ней все хорошо, модем я специально перевожу в аварийный режим загрузки, чтобы научиться спасать его собратьев).
Производитель поставляет собственные загрузчики в составе прошивки, на всякий случай размещаю их тут: http://rgho.st/8pqLC2nqq
Очень надеюсь, что вы сможете чем-то помочь в данной ситуации. Готов оказывать всяческое содействие.
Сохранить статус 9008 после qwdirect
У меня есть модуль 4G MDM9225. После рендера rawdump.bin делаю прошивку qwdirect но модем все равно не ревертируется
Загрузчик 7625
Пожалуйста сделайте патченный загрузчик под этот проц.
Добавить память в ENPRG6695
Возможно ли добавить флеш Hynix_H9DA1GH51HBMBR в этот загрузчик?
error in compile
[email protected]:~/Desktop/qtools-master$ make
gcc -O2 -g -Wno-unused-result -Wunused -c -o qcommand.o qcommand.c
In file included from qcommand.c:1:0:
include.h:38:39: fatal error: readline/readline.h: No such file or directory
compilation terminated.
: recipe for target ‘qcommand.o’ failed
make: *** [qcommand.o] Error 1
Ошибка сегментирования
segfault at 7fffbba9d040 ip 0000564c9dd8b662 sp 00007ffcbf21f540 error 6 in qrflash[564c9dd8b000+5000]
Востановление загрузчика
Добрый день.
Имеются неаколько mini-PCIe карт Sierra Wireless AirPrime MC8090 у которых поврежден загрузчик, находится в режиме Qualcomm HS-USB QDLoader 9008.
Пытаюсь востановить загружчик с помощью команды:
./qdload -p /dev/ttyUSB0 -k 4 -i loaders/NPRG6200_p_1.bin
Но после этого модем вообще перестает определяться
usb 1-3: device descriptor read/64, error -110
Может кто-нибудь помочь с востановлением.
Заранее спасибо.
Hi I have a ZTE MF920v it has MDM9207, how can i backup and restore rom.
Hi, I used ZTE terminal software update framework to update one of my ZTE MF920v, at first it was sucessfully flashed now it is always stuck at 4%. I need to backup rom from my other ZTE MF920v and restore it on my bricked device. Please help.
logical error in convert_cmdbuf
The correct way to escape a command is:
Example
- escape the command
- apply the hdlc checksum
- escape the checksum
Your rotine does only the first one
But it will give error if the checksum contains 7e,7d or 5d.
Regards.
Zibri
Huawei EC5377 Flash
Нужен лоадер для Qualcomm MSM7625A
Здравтвуйте! Я так надругался над своим E5830, что, похоже, он ушел в режим аварийной загрузки PBL. Единтсвенное, на что он реагирует, так это на qdload (начинает моргать индикатор модемного соединения). На прошивки он не реагирует. Разве что, после balong_flash он начинает выдавать это:
~¤¤¤Њo~_
Пожалуйста, помогите найти загрузчик и адрес загрузки.
ENPRG9x00 with NAND KFM1GN6Q2D-VEB.
Does not work with NAND KFM1GN6Q2D-VEB. Can help to understand what’s the reason.
Thank advance
Очень нужен дамп PBL
Коллеги, здравствуйте.
Для исследования очень нужен дамп PBL от MSM8953 или чего-нибудь близкого. Выложите куда-нибудь, пожалуйста.
Recommend Projects
-
ReactA declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
TypescriptTypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlowAn Open Source Machine Learning Framework for Everyone
-
DjangoThe Web framework for perfectionists with deadlines.
-
LaravelA PHP framework for web artisans
-
D3Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
FacebookWe are working to build community through open source technology. NB: members must have two-factor auth.
-
MicrosoftOpen source projects and samples from Microsoft.
-
GoogleGoogle ❤️ Open Source for everyone.
-
AlibabaAlibaba Open Source for everyone
-
D3Data-Driven Documents codes.
-
TencentChina tencent open source team.










