WELCOME TO MY BLOG
SELAMAT DATANG D BLOG INI
Minggu, 02 Januari 2011
internet hack
internet penyedia layanan selular, layanan, hacks hardware. Tapi kenapa tidak bisa Anda menemukan ringkasan dari semua tweak yang paling berguna dan hacks? Anda bisa. Anda lakukan.Rabu, 13 September 2006Driver Linux Hack untuk EVDO kpc650 v620 v640 Verizon SprintJadi, kita berada di ToorCon (HACKER) Konferensi Keamanan. Saya mendengar seorang ilmuwan gila produktif memuntahkan kerentanan keamanan di Cingular Wireless, T-Mobile, dan Sprint. Dia menjelaskan bagaimana Anda bisa mendapatkan menit terbatas panggilan gratis oleh spoofing identifikasi pemanggil cid atau karena sistem penagihan dari perusahaan-perusahaan ini tidak "L ^ KJ & FS * A # R" (Lance, apa istilah yang terjadi di sini?) Yang aktif. Dan ia terus menjelaskan bagaimana ia bisa mendapatkan bios lengkap tentang SIAPA yang menyebut dirinya dari NOMOR TERBATAS ... Sehingga dia bisa tahu persis siapa yang menelepon sebelum dia berbicara kepada mereka .. WOW ..Anyways, Ternyata dia bisa melakukan semua ini tetapi tidak bisa ONLINE! : O)Jadi, Karena kita harus ekstra kpc650 EVDO AirCards, dan karena ia memiliki mesin linux, saya pikir, "givem kartu, dia akan membuat driver sendiri." Seperti yang anda lihat ... Ini bekerja ....Catatan: Untuk membuat Novatel V620 Driver Linux, Anda akan membutuhkan 2 hal,1.halaman ini.2. produk id dan vendor id dari halaman ini: Novatel V620 Linux DriverEVDO-Coverage.com Wireless Internet Consulting wrote:> Hmmm> .. WAIT! Anda melakukan itu pukul 2 pagi ?>????>> Whats kode ???!?!Ok - jadi apa yang Anda lakukan adalah menempatkan ini dalam Anda/ Usr / src / linux / drivers / usb / serial / direktorikemudian kamu menuju ke / usr / src / linux dan membuat modul & & make modules_installkemudian untuk memuat hal ini:Anda harus melakukan lsusb dan mendapatkan vendor / produk id seperti:$ LsusbBus 005 Device 002: ID 0c88: 17da Kyocera Wireless Corpkemudian modprobe usbserial modul baru Anda (rmmod apapun jika mereka sudahdimuat)modprobe usbserial vendor = 0xc88 produk = 0x17da maxsize = 2048maka jika tidak membuat / dev/ttyUSB0 dan / dev/ttyUSB1 pada itu sendiri Anda lakukan:mknod / dev/ttyUSB0 c 188 0mknod / dev/ttyUSB1 c 188 1dan kemudian jika perlu pppd harus dikonfigurasi:mknod / dev / ppp c 108 0setelah itu memuat kpppdan pada dasarnya Anda mengatur modem Anda ke / dev/ttyUSB0maka nomor telepon # 777login dan pass sama dengan windows jadi number@vzw3g.com dan vzw sebagai lancar.Hit dial dan Tada anda terhubung.[Diedit untuk singkatnya]>> On 9/23/05, * Lance James *> wrote:>> Ok, saya mendapat Kyocera bekerja di linux.>> -> Best Regards,> Lance James> Ilmu Secure Corporation> Www.securescience.netPenulis> dari 'Phishing Exposed'> Http://www.securescience.net/amazon/> Cari tahu bagaimana malware mempengaruhi perusahaan Anda: Dapatkan akun LPS> Hari ini!https>: / / slam.securescience.com / signup.cgi - it's free!>>>>> -> X ------------- Alohaaaaaaaa -----------> Robert Kim, Konsultan Internet Wireless> Http://evdo-coverage.com> 2611 101 S. Coast Highway Suite 102> Cardiff oleh Laut, CA 92007> 310 862 4250>> "Kami Makan bilik untuk Brunch (sm)"> X ------------- Shalommmmmmm ------------- Sembunyikan teks kutipan -Best Regards,Lance JamesIlmu Secure Corporationwww.securescience.netPenulis 'Phishing serial = to_usb_serial (kref);dbg ("% s -% s", __FUNCTION__, ketik nama-> serial->);serial-> type-> shutdown (serial);/ * Mengembalikan rentang kecil bahwa perangkat ini memiliki * /return_serial (serial);untuk (i = 0; i <> num_ports; + + i)serial-> port [i] -> open_count = 0;/ * Port dibersihkan dan dirilis di port_release () * /untuk (i = 0; i <> num_ports; + + i)if (serial-> port [i] -> dev.parent = NULL!) {device_unregister (& serial-> port [i] -> dev);serial-> port [i] = NULL;}/ * Jika ini adalah "palsu" port, kami harus membersihkan itu di sini, karena akan* Tidak bisa dibersihkan di port_release () seperti yang pernah terdaftar* Ini * driver core /if (num_ports serial-> <> num_port_pointers) {for (i = num_ports serial->; i <> num_port_pointers; + + i) {port = serial port-> [i];if (! port)melanjutkan;usb_kill_urb (read_urb port->);usb_free_urb (read_urb port->);usb_kill_urb (write_urb port->);usb_free_urb (write_urb port->);usb_kill_urb (interrupt_in_urb port->);usb_free_urb (interrupt_in_urb port->);usb_kill_urb (interrupt_out_urb port->);usb_free_urb (interrupt_out_urb port->);kfree (bulk_in_buffer port->);kfree (bulk_out_buffer port->);kfree (interrupt_in_buffer port->);kfree (interrupt_out_buffer port->);}}usb_put_dev (dev serial->);/ * Membebaskan memori apapun yang kita dialokasikan * /kfree (serial);}/*********************************** Fungsi tty antarmuka Driver********************************** /int serial_open statis (struct tty_struct tty *, struct file * filp){struct serial * usb_serial;struct port usb_serial_port *;unsigned int portNumber;int retval;dbg ("% s", __FUNCTION__);/ * Mendapatkan obyek serial terkait dengan pointer * tty /serial = usb_serial_get_by_index (indeks tty->);if (serial!) {tty-> driver_data = NULL;kembali-ENODEV;}portNumber tty-> = indeks - serial-> kecil;port = serial-> port [portNumber];+ + Open_count port->;if (open_count port-> == 1) {/ * Membuat struktur port kami membuat driver tty* Ingat objek pelabuhan kita, dan kita itu * /tty-> driver_data = port;port-> tty = tty;/ * Kunci modul ini sebelum kita menyebutnya* Ini mungkin gagal, yang berarti kita harus bail out,* Aman karena kita dipanggil dengan * BKL diselenggarakan /if (try_module_get (pemilik tipe-> serial->)!) {retval =-ENODEV;goto bailout_kref_put;}/ * Hanya memanggil perangkat khusus terbuka jika ini* Adalah pertama kalinya port dibuka * /retval = serial-> type-> terbuka (port, filp);if (retval)goto bailout_module_put;}return 0;bailout_module_put:module_put (pemilik tipe-> serial->);bailout_kref_put:kref_put (& kref serial->, destroy_serial);port-> open_count = 0;return retval;}serial_close static void (struct tty_struct tty *, struct file * filp){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;if (! port)kembali;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (open_count port-> == 0)kembali;- Open_count port->;if (open_count port-> == 0) {/ * Hanya panggilan dekat perangkat khusus jika hal ini* Port sedang ditutup oleh pemilik terakhir * /port-> type-> close serial-> (port, filp);if (tty port->) {if (driver_data tty-> port->)port-> tty-> driver_data = NULL;port-> tty = NULL;}module_put (port-> pemilik tipe-> serial->);}kref_put (& kref serial-> port->, destroy_serial);}int serial_write statis (struct tty_struct tty *, buf * const unsigned char, int jumlah){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;int retval =-EINVAL;dbg ("% s - port% d,% d byte (s)", __FUNCTION__, nomor port->, count);if (open_count port->!) {dbg ("% s - port tidak dibuka", __FUNCTION__);goto keluar;}/ * Lulus pada versi driver khusus dari fungsi * /retval = port-> serial-> type-> write (port, buf, count);keluar:return retval;}int serial_write_room statis (struct tty_struct tty *){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;int retval =-EINVAL;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);goto keluar;}/ * Lulus pada versi driver khusus dari fungsi * /retval = write_room port-> type-> serial-> (port);keluar:return retval;}int serial_chars_in_buffer statis (struct tty_struct tty *){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;int retval =-EINVAL;dbg ("% s = port% d", __FUNCTION__, nomor port->);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);goto keluar;}/ * Lulus pada versi driver khusus dari fungsi * /retval = chars_in_buffer port-> type-> serial-> (port);keluar:return retval;}serial_throttle static void (struct tty_struct tty *){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);kembali;}/ * Lulus pada versi driver khusus dari fungsi * /if (port-> throttle tipe-> serial->)port-> type-> throttle serial-> (port);}serial_unthrottle static void (struct tty_struct tty *){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);kembali;}/ * Lulus pada versi driver khusus dari fungsi * /if (port-> unthrottle tipe-> serial->)port-> type-> unthrottle serial-> (port);}int serial_ioctl statis (struct tty_struct tty *, struct file * file, unsigned int cmd, unsigned long arg){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;int retval =-ENODEV;dbg ("% s - port% d, cmd 0x% .4 x", __FUNCTION__, nomor port-> cmd);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);goto keluar;}/ * Lulus pada versi driver khusus dari fungsi ini jika * tersedia /if (port-> ioctl tipe-> serial->)retval ioctl = port-> type-> serial-> (port, file, cmd, arg);lainretval =-ENOIOCTLCMD;keluar:return retval;}serial_set_termios static void (struct tty_struct tty *, struct termios * lama){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);kembali;}/ * Lulus pada versi driver khusus dari fungsi ini jika * tersedia /if (port-> set_termios tipe-> serial->)port-> type-> set_termios serial-> (port, lama);}serial_break static void (struct tty_struct * tty, int break_state){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);kembali;}/ * Lulus pada versi driver khusus dari fungsi ini jika * tersedia /if (port-> break_ctl tipe-> serial->)port-> type-> break_ctl serial-> (port, break_state);}int statis serial_read_proc (* halaman char, char ** mulai, off_t off, int jumlah, eof int *, void * data){struct serial * usb_serial;int panjang = 0;int i;off_t mulai = 0;char tmp [40];dbg ("% s", __FUNCTION__);panjang + = sprintf (page, "usbserinfo: 1.0 driver:% s \ n", DRIVER_VERSION);untuk (i = 0; i <serial = "usb_serial_get_by_index (i);" tipe-serial ="=">> pemilik)panjang + = sprintf (halaman + panjang, "modul:% s", module (pemilik tipe-> serial->));panjang + = sprintf (halaman + panjang, "nama: \"% s \ "", ketik nama-> serial->);panjang + = sprintf (halaman + panjang, "vendor:% 04x produk:% 04x",le16_to_cpu (descriptor.idVendor dev-> serial->),le16_to_cpu (descriptor.idProduct dev-> serial->));panjang + = sprintf (halaman + panjang, "num_ports:% d", num_ports serial->);panjang + = sprintf (halaman + panjang, "port:% d", i - serial-> + minor 1);usb_make_path (dev serial->, tmp, sizeof (tmp));panjang + = sprintf (halaman + panjang, "path:% s", tmp);panjang + = sprintf (halaman + panjang, "\ n");if ((panjang + mulai)> (off + count))goto dilakukan;if ((panjang + mulai) <panjang = "0;"> kref, destroy_serial);}* Eof = 1;dilakukan:if (off> = (panjang + mulai))return 0;* Start = halaman + (off-dimulai);return ((count <port = "(struct"> driver_data;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);goto keluar;}if (port-> tiocmget tipe-> serial->)tiocmget kembali port-> type-> serial-> (port, file);keluar:kembali-EINVAL;}int serial_tiocmset statis (struct tty_struct tty *, struct file * file,unsigned int set, unsigned int jelas){struct usb_serial_port port * = (struct * usb_serial_port) driver_data tty->;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (open_count port->!) {dbg ("% s - port tidak terbuka", __FUNCTION__);goto keluar;}if (port-> tiocmset tipe-> serial->)tiocmset kembali port-> type-> serial-> (port, file, mengatur, menghapus);keluar:kembali-EINVAL;}usb_serial_port_softint void (void * private){struct port usb_serial_port * = (struct * usb_serial_port) swasta;struct tty_struct tty *;dbg ("% s - port% d", __FUNCTION__, nomor port->);if (! port)kembali;tty tty = port->;if (! tty)kembali;tty_wakeup (tty);}static void port_release (struct device * dev){struct usb_serial_port port * = to_usb_serial_port (dev);dbg ("% s -% s", __FUNCTION__, bus_id dev->);usb_kill_urb (read_urb port->);usb_free_urb (read_urb port->);usb_kill_urb (write_urb port->);usb_free_urb (write_urb port->);usb_kill_urb (interrupt_in_urb port->);usb_free_urb (interrupt_in_urb port->);usb_kill_urb (interrupt_out_urb port->);usb_free_urb (interrupt_out_urb port->);kfree (bulk_in_buffer port->);kfree (bulk_out_buffer port->);kfree (interrupt_in_buffer port->);kfree (interrupt_out_buffer port->);kfree (port);}static struct * create_serial usb_serial (struct dev * usb_device,struct antarmuka usb_interface *,tipe struct usb_serial_device_type *){struct serial * usb_serial;serial = kmalloc (sizeof (* serial), GFP_KERNEL);if (serial!) {dev_err (& dev dev->, "% s - kehabisan memori \ n", __FUNCTION__);return NULL;}memset (serial, 0, sizeof (* serial));serial-> dev = usb_get_dev (dev);serial-> type = tipe;serial-> interface = antarmuka;kref_init (& kref serial->);kembali serial;}usb_serial_device_type statis struct * search_serial_device (struct usb_interface * IFACE){struct p * list_head;const struct usb_device_id id *;struct t usb_serial_device_type *;/ * List tahu melalui perangkat dan melihat apakah id usb cocok * /list_for_each (p, & usb_serial_driver_list) {t = list_entry (p, struct usb_serial_device_type, driver_list);id usb_match_id = (IFACE, t-> id_table);if (id = NULL!) {dbg ("deskripsi cocok");return t;}}return NULL;}usb_serial_probe int (struct antarmuka * usb_interface,const struct * usb_device_id id){struct usb_device dev * = interface_to_usbdev (interface);struct serial * usb_serial = NULL;struct port usb_serial_port *;struct * usb_host_interface iface_desc;struct endpoint usb_endpoint_descriptor *;struct usb_endpoint_descriptor * interrupt_in_endpoint [MAX_NUM_PORTS];struct usb_endpoint_descriptor * interrupt_out_endpoint [MAX_NUM_PORTS];struct usb_endpoint_descriptor * bulk_in_endpoint [MAX_NUM_PORTS];struct usb_endpoint_descriptor * bulk_out_endpoint [MAX_NUM_PORTS];usb_serial_device_type struct * type = NULL;int retval;int kecil;int buffer_size;int i;int num_interrupt_in = 0;int num_interrupt_out = 0;int num_bulk_in = 0;int num_bulk_out = 0;int num_ports = 0;int max_endpoints;type = search_serial_device (interface);if (type!) {dbg ("none cocok");kembali-ENODEV;}serial = create_serial (dev, antarmuka, jenis);if (serial!) {dev_err (& dev antarmuka->, "% s - kehabisan memori \ n", __FUNCTION__);kembali-ENOMEM;}/ * Jika jenis perangkat ini memiliki fungsi penyelidikan, sebut saja * /if (probe tipe->) {const struct usb_device_id id *;if (try_module_get (pemilik tipe->)!) {dev_err (& dev antarmuka->, "modul mendapatkan gagal, keluar \ n");kfree (serial);return-EIO;}id = usb_match_id (antar muka, tipe-> id_table);retval tipe-> = probe (serial, id);module_put (pemilik tipe->);if (retval) {dbg ("sub driver perangkat ditolak");kfree (serial);return retval;}}/ Deskriptor * cocok, mari kita cari titik akhir * dibutuhkan // * Memeriksa * endpoints /iface_desc = antarmuka-> cur_altsetting;untuk (i = 0; i <> desc.bNumEndpoints; + + i) {endpoint = & endpoint iface_desc-> [i] desc.;if ((bEndpointAddress endpoint-> & 0x80) & &((BmAttributes endpoint-> & 3) == 0x02)) {/ * Kami menemukan massal di titik akhir * /dbg ("massal ditemukan di titik akhir pada% d", i);bulk_in_endpoint [num_bulk_in] = titik akhir;+ + Num_bulk_in;}if (((bEndpointAddress endpoint-> & 0x80) == 0x00) & &((BmAttributes endpoint-> & 3) == 0x02)) {/ * Kami menemukan massal keluar * titik akhir /dbg ("ditemukan massal keluar di titik akhir% d", i);bulk_out_endpoint [num_bulk_out] = titik akhir;+ + Num_bulk_out;}if ((bEndpointAddress endpoint-> & 0x80) & &((BmAttributes endpoint-> & 3) == 0x03)) {/ * Kami menemukan titik akhir * interrupt di /dbg ("ditemukan interupsi dalam pada endpoint% d", i);interrupt_in_endpoint [num_interrupt_in] = titik akhir;+ + Num_interrupt_in;}if (((bEndpointAddress endpoint-> & 0x80) == 0x00) & &((BmAttributes endpoint-> & 3) == 0x03)) {/ * Kami menemukan sebuah * tahu titik akhir mengganggu /dbg ("menemukan titik akhir interupsi pada% d", i);interrupt_out_endpoint [num_interrupt_out] = titik akhir;+ + Num_interrupt_out;}}# Jika didefinisikan (CONFIG_USB_SERIAL_PL2303) didefinisikan (CONFIG_USB_SERIAL_PL2303_MODULE)/ * BEGIN mengerikan HACK UNTUK PL2303 * // * Ini diperlukan karena cara Looney titik ujungnya ditetapkan * /if (((le16_to_cpu (descriptor.idVendor dev->) == PL2303_VENDOR_ID) & &(Le16_to_cpu (descriptor.idProduct dev->) == PL2303_PRODUCT_ID))((Le16_to_cpu (descriptor.idVendor dev->) == ATEN_VENDOR_ID) & &(Le16_to_cpu (descriptor.idProduct dev->) == ATEN_PRODUCT_ID))) {jika (antarmuka = interface! actconfig-> dev-> [0]) {/ * Check out endpoint dari interface lain * /iface_desc = antarmuka actconfig-> dev-> [0] - cur_altsetting>;untuk (i = 0; i <> desc.bNumEndpoints; + + i) {endpoint = & endpoint iface_desc-> [i] desc.;if ((bEndpointAddress endpoint-> & 0x80) & &((BmAttributes endpoint-> & 3) == 0x03)) {/ * Kami menemukan titik akhir * interrupt di /dbg ("ditemukan interrupt in untuk perangkat Prolific pada antarmuka terpisah");interrupt_in_endpoint [num_interrupt_in] = titik akhir;+ + Num_interrupt_in;}}}/ * Sekarang pastikan PL-2303 dikonfigurasi dengan benar.* Jika tidak, berikan sekarang dan berharap hack ini akan bekerja* Benar selama doa kemudian usb_serial_probe* /jika (num_bulk_in == 0 num_bulk_out == 0) {dev_info (& dev antarmuka->, "PL-2303 hack: deskriptor cocok tapi endpoint tidak \ n");kfree (serial);kembali-ENODEV;}}/ * END mengerikan HACK UNTUK PL2303 * /# Endif/ * Menemukan semua yang kita butuhkan * /dev_info (& dev antarmuka->, "terdeteksi konverter% s \ n", nama tipe->);# Ifdef CONFIG_USB_SERIAL_GENERICif (tipe == & usb_serial_generic_device) {num_ports = num_bulk_out;jika (num_ports == 0) {dev_err (& dev antarmuka->, "Generik perangkat tanpa keluar massal, tidak diperbolehkan. \ n");kfree (serial);return-EIO;}}# Endifif (num_ports!) {/ * Jika jenis perangkat ini memiliki fungsi calc_num_ports, sebut saja * /if (calc_num_ports tipe->) {if (try_module_get (pemilik tipe->)!) {dev_err (& dev antarmuka->, "modul mendapatkan gagal, keluar \ n");kfree (serial);return-EIO;}num_ports = Jenis-> calc_num_ports (serial);module_put (pemilik tipe->);}if (! num_ports)num_ports = Jenis-> num_ports;}if (get_free_serial (serial, num_ports, & minor) == NULL) {dev_err (& dev antarmuka->, "Tidak ada perangkat serial lebih bebas \ n");kfree (serial);kembali-ENOMEM;}serial-> minor = kecil;serial-> num_ports = num_ports;serial-> num_bulk_in = num_bulk_in;serial-> num_bulk_out = num_bulk_out;serial-> num_interrupt_in = num_interrupt_in;serial-> num_interrupt_out = num_interrupt_out;/ * Menciptakan port kita, kita perlu sebanyak itu * max endpoints // * Kita tidak menggunakan num_ports sini cauz beberapa perangkat endpoint memiliki pasangan lebih dari * port /max_endpoints = max (num_bulk_in, num_bulk_out);max_endpoints = max (max_endpoints, num_interrupt_in);max_endpoints = max (max_endpoints, num_interrupt_out);max_endpoints = max (max_endpoints, (int) num_ports serial>);serial-> num_port_pointers = max_endpoints;dbg ("% s -% d mendirikan struktur port untuk perangkat ini",, max_endpoints __FUNCTION__);untuk (i = 0; i <port = "kmalloc (sizeof (struct"> Nomor = i + serial-> kecil;port-> serial = serial;spin_lock_init (& lock port->);INIT_WORK (& bekerja port->, usb_serial_port_softint, port);serial-> port [i] = port;}/ * Set up * informasi titik akhir /untuk (i = 0; i <endpoint = "bulk_in_endpoint [i];" = port "serial"> port [i];port-> read_urb = usb_alloc_urb (0, GFP_KERNEL);if (read_urb port->!) {dev_err (& dev antarmuka->, "Tidak urbs gratis tersedia \ n");goto probe_error;}buffer_size = (wMaxPacketSize endpoint->> maxsize) endpoint-> wMaxPacketSize: maxsize;?port-> bulk_in_size = buffer_size;port-> bulk_in_endpointAddress = bEndpointAddress endpoint->;bulk_in_buffer port-> = kmalloc (buffer_size, GFP_KERNEL);if (bulk_in_buffer port->!) {dev_err (& dev antarmuka->, "Tidak dapat mengalokasikan bulk_in_buffer \ n");goto probe_error;}usb_fill_bulk_urb (read_urb port->, dev,usb_rcvbulkpipe (dev,endpoint-> bEndpointAddress),bulk_in_buffer port->, buffer_size,serial-> read_bulk_callback tipe->,port);}untuk (i = 0; i <endpoint = "bulk_out_endpoint [i];" = port "serial"> port [i];port-> write_urb = usb_alloc_urb (0, GFP_KERNEL);if (write_urb port->!) {dev_err (& dev antarmuka->, "Tidak urbs gratis tersedia \ n");goto probe_error;}buffer_size = le16_to_cpu (wMaxPacketSize endpoint->);port-> bulk_out_size = buffer_size;port-> bulk_out_endpointAddress = bEndpointAddress endpoint->;bulk_out_buffer port-> = kmalloc (buffer_size, GFP_KERNEL);if (bulk_out_buffer port->!) {dev_err (& dev antarmuka->, "Tidak dapat mengalokasikan bulk_out_buffer \ n");goto probe_error;}usb_fill_bulk_urb (write_urb port->, dev,usb_sndbulkpipe (dev,endpoint-> bEndpointAddress),bulk_out_buffer port->, buffer_size,serial-> write_bulk_callback tipe->,port);}if (read_int_callback tipe-> serial->) {untuk (i = 0; i <endpoint = "interrupt_in_endpoint [i];" = port "serial"> port [i];port-> interrupt_in_urb = usb_alloc_urb (0, GFP_KERNEL);if (interrupt_in_urb port->!) {dev_err (& dev antarmuka->, "Tidak urbs gratis tersedia \ n");goto probe_error;}buffer_size = le16_to_cpu (wMaxPacketSize endpoint->);port-> interrupt_in_endpointAddress = bEndpointAddress endpoint->;interrupt_in_buffer port-> = kmalloc (buffer_size, GFP_KERNEL);if (interrupt_in_buffer port->!) {dev_err (& dev antarmuka->, "Tidak dapat mengalokasikan interrupt_in_buffer \ n");goto probe_error;}usb_fill_int_urb (interrupt_in_urb port->, dev,usb_rcvintpipe (dev,endpoint-> bEndpointAddress),interrupt_in_buffer port->, buffer_size,serial-> type-> read_int_callback, pelabuhan,endpoint-> bInterval);}} Else if (num_interrupt_in) {dbg ("perangkat klaim untuk mendukung interupsi di transfer, tetapi read_int_callback tidak didefinisikan");}if (write_int_callback tipe-> serial->) {untuk (i = 0; i <endpoint = "interrupt_out_endpoint [i];" = port "serial"> port [i];port-> interrupt_out_urb = usb_alloc_urb (0, GFP_KERNEL);if (interrupt_out_urb port->!) {dev_err (& dev antarmuka->, "Tidak urbs gratis tersedia \ n");goto probe_error;}buffer_size = le16_to_cpu (wMaxPacketSize endpoint->);port-> interrupt_out_size = buffer_size;port-> interrupt_out_endpointAddress = bEndpointAddress endpoint->;interrupt_out_buffer port-> = kmalloc (buffer_size, GFP_KERNEL);if (interrupt_out_buffer port->!) {dev_err (& dev antarmuka->, "Tidak dapat mengalokasikan interrupt_out_buffer \ n");goto probe_error;}usb_fill_int_urb (interrupt_out_urb port->, dev,usb_sndintpipe (dev,endpoint-> bEndpointAddress),interrupt_out_buffer port->, buffer_size,serial-> type-> write_int_callback, pelabuhan,endpoint-> bInterval);}} Else if (num_interrupt_out) {dbg ("perangkat klaim untuk mendukung transfer keluar mengganggu, tetapi write_int_callback tidak didefinisikan");}/ * Jika jenis perangkat ini memiliki fungsi melampirkan, sebut saja * /jika (tipe-> lampirkan) {if (try_module_get (pemilik tipe->)!) {dev_err (& dev antarmuka->, "modul mendapatkan gagal, keluar \ n");goto probe_error;}retval = Jenis-> attach (serial);module_put (pemilik tipe->);if (<retval> 0) {/ * Diam-diam menerima perangkat ini, tetapi tidak mengikat ke port serial* Seperti itu akan menghilang * /goto keluar;}}/ * Mendaftarkan semua port individu dengan core driver * /untuk (i = 0; i <port = "serial"> port [i];port-> dev.parent = & dev antarmuka->;port-> dev.driver = NULL;port-> dev.bus = & usb_serial_bus_type;port-> dev.release = & port_release;snprintf (& port-> dev.bus_id [0], sizeof (dev.bus_id port->), "ttyUSB% d", nomor port->);dbg ("% s -% s mendaftar", __FUNCTION__, dev.bus_id port->);device_register (& dev port->);}usb_serial_console_init (debug, kecil);keluar:/ * Sukses * /usb_set_intfdata (interface, serial);return 0;probe_error:untuk (i = 0; i <port = "serial"> port [i];if (! port)melanjutkan;if (read_urb port->)usb_free_urb (read_urb port->);kfree (bulk_in_buffer port->);}untuk (i = 0; i <port = "serial"> port [i];if (! port)melanjutkan;if (write_urb port->)usb_free_urb (write_urb port->);kfree (bulk_out_buffer port->);}untuk (i = 0; i <port = "serial"> port [i];if (! port)melanjutkan;if (interrupt_in_urb port->)usb_free_urb (interrupt_in_urb port->);kfree (interrupt_in_buffer port->);}untuk (i = 0; i <port = "serial"> port [i];if (! port)melanjutkan;if (interrupt_out_urb port->)usb_free_urb (interrupt_out_urb port->);kfree (interrupt_out_buffer port->);}/ * Mengembalikan rentang kecil bahwa perangkat ini memiliki * /return_serial (serial);/ * Membebaskan memori apapun yang kita dialokasikan * /untuk (i = 0; i <> num_port_pointers; + + i)kfree (port serial-> [i]);kfree (serial);return-EIO;}void usb_serial_disconnect (struct usb_interface * interface){int i;struct serial * usb_serial = usb_get_intfdata (interface);struct device * dev = & dev antarmuka->;struct port usb_serial_port *;dbg ("% s", __FUNCTION__);usb_set_intfdata (antarmuka, NULL);if (serial) {untuk (i = 0; i <> num_ports; + + i) {port = serial port-> [i];if (tty port & & port->)tty_hangup (tty port->);}/ * Membiarkan pemegang terakhir dari objek ini* Menyebabkan ia dibersihkan * /kref_put (& kref serial->, destroy_serial);}dev_info (dev, "perangkat terputus \ n");}static struct tty_operations serial_ops = {buka =. serial_open,dekat =. serial_close,menulis = serial_write.,write_room =. serial_write_room,ioctl =. serial_ioctl,set_termios =. serial_set_termios,throttle =. serial_throttle,unthrottle =. serial_unthrottle,break_ctl =. serial_break,chars_in_buffer =. serial_chars_in_buffer,read_proc =. serial_read_proc,tiocmget =. serial_tiocmget,tiocmset =. serial_tiocmset,};struct usb_serial_tty_driver tty_driver *;statis usb_serial_init __init int (void){int i;int hasil;usb_serial_tty_driver = alloc_tty_driver (SERIAL_TTY_MINORS);if (! usb_serial_tty_driver)kembali-ENOMEM;/ * Inisialisasi * global kami data /untuk (i = 0; pemilik = THIS_MODULE; i <hasil = "bus_register (& usb_serial_bus_type)">;usb_serial_tty_driver-> driver_name = "usbserial";usb_serial_tty_driver-> devfs_name = "usb / tts /";usb_serial_tty_driver-> name = "ttyUSB";usb_serial_tty_driver-> utama = SERIAL_TTY_MAJOR;usb_serial_tty_driver-> minor_start = 0;usb_serial_tty_driver-> type = TTY_DRIVER_TYPE_SERIAL;usb_serial_tty_driver-> subtype = SERIAL_TYPE_NORMAL;usb_serial_tty_driver-> flags = TTY_DRIVER_REAL_RAW TTY_DRIVER_NO_DEVFS;usb_serial_tty_driver-> init_termios = tty_std_termios;usb_serial_tty_driver-> init_termios.c_cflag = B9600 CS8 CREAD HUPCL CLOCAL;tty_set_operations (usb_serial_tty_driver, & serial_ops);Hasil = tty_register_driver (usb_serial_tty_driver);jika (hasil) {err ("% s - tty_register_driver gagal", __FUNCTION__);goto exit_reg_driver;}/ * Register * driver USB /Hasil = usb_register (& usb_serial_driver);if (hasil <hasil = "usb_serial_generic_register (debug);"> fungsi) {tipe fungsi-> = usb_serial_generic_ # # Fungsi; dbg ("Apakah untuk menimpa" # fungsi "operasi serial usb dengan yang .");} generik } while (0)static void fixup_generic (struct perangkat usb_serial_device_type *){set_to_generic_if_null (perangkat, buka);set_to_generic_if_null (perangkat, menulis);set_to_generic_if_null (perangkat, dekat);set_to_generic_if_null (perangkat, write_room);set_to_generic_if_null (perangkat, chars_in_buffer);set_to_generic_if_null (perangkat, read_bulk_callback);set_to_generic_if_null (perangkat, AAAAODULE_PARM_DESC (maxsize, "Pengguna yang ditentukan USB endpoint size");Untuk K
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar