Programming :: Block On Write Call To TtyACM Device
Nov 1, 2010
I have a write call to a ttyACM serial device that blocks after several hundreds bytes are written.I'm writing in ~25 byte chunks, so I have 5-8 successful writes, then the next write blocks forever.I can bypass the blocked call using select, but I can never call write again without closing and re-opening the port.
The serial port is opened correctly because I can read from it just fine. Write permissions are correct, and it's opened RW.The code is likely correct because I tested the same code using the same device on a pure RS-232 serial port, and it worked fine - no block. Is there anything to know about the linux ACM module?It's my understanding that write calls basically shouldn't block.They're supposed to return -1 if there's an error.
I can browse the iso image easily enough with a loopback mount, but when it comes to mounting the actual CD (which I did first), I get:
Code: $ sudo mount -t udf,iso9660 /dev/dvd /mnt/dvd mount: block device /dev/dvd is write-protected, mounting read-only mount: wrong fs type, bad option, bad superblock on /dev/dvd, missing codepage or other error In some cases useful info is found in syslog - try dmesg | tail or so /var/log/messages isn't very helpful, either:
I burned it with K3B and it gets the same result trying to mount it. K3B seems to know that the image is an iso9660 and is able to display the various 9660 id fields just fine. It just won't mount.
I am trying to write a bash script to call from a terminal that will change the terminal title. I am using ubuntu 10.04. The script is meant to be used in the gnome-terminal.
Here is what I have:
Code: #! bin/bash echo "New title: c" read title echo "33]0;$titl07c" -e
[Code]....
it doesn't work
I think the problem has to do with modifying PS1 inside the bash so i tried this:
Code: echo `export PS1="[e]1;u@h:wa]${debian_chroot:+($debian_chroot)}u@h:w$ "` and it still didn't work.
How do you go about getting the raw size of a block device under Linux from within a C program? And I mean the raw size of the block device itself, not a file system that may or may not be installed on it. And I'd like to be able to get the raw size of any block device, from hard drives (e.g., /dev/sda) to LVM partitions (/dev/mapper/vg0-home) to loop devices to anything else that is a Linux block device.
I'm setting up a machine that's going to be used to test randomly connected tape drives one at a time, and as such, I'm writing the test routine using mt in a bash script, for user-friendliness. The problem is the block device name changes on occasion as tape drives are swapped out and busses are rescanned, so I can't "hard code" a block name into the script.
I know programs like lsscsi and hwinfo will give you block device names as part of their output, but I can't seem to grep anything in such a way as to have the final output be just the block name (ie /dev/st2, or optimally 'st2'), so that I can just have the script read said output, and drop it into the necessary variable.
Of course, it's Windows only, and XP only at that. However, the data that needs transferred between the device and the computer should be fairly basic, unless it offloads a lot of processing to the computer. I'm not a programmer, nor do I play one on TV, but I have written some fairly complicated microcontroller programs and some basic Java GUIs. Besides writing the actual code, how hard is it to do whatever needs done to make a Linux device driver, apart from the code to make the device work?
I'm writing a C program that reads the boot sector of a USB disk. (it is mounted as /dev/sda1). I'm able to read the sector, by the calls code...
The problem is when I wish to write. I use the call: bytesWrite = write(fd, buf, 512) The 'write' returns the value of 512, which looks as if the write was successful, yet when I read again the /dev/sda1 device, I see that no writing was actually made.
Can anybody tell me what do I need to do in order to allow an actual write to the device?
I am final year MCA student. I like to do my project in Linux. I know a little in C. I am pursuing RHCE certification. I am using rhel5. I am interested to write linux device drivers and willing to do my project in that.
For example, can I write something to the effect: block all outbound UDP connections over port 53 except those going to IP 123.456.789. Or stated another way: Block outbound to port 53/udp NOT going to ip address 123.454.678Is it possible to do this? How would I write the argument?
I was trying to write IPTABLES script to block the ICMP ping using the below mentioned command in OpenSUSE 11.2 Doing this in VMware.....
iptables -A OUTPUT -o eth0 -p icmp -j DROP
& then I tried to ping the different computer & it didnt allow me to ping. Then I deleted using the command -
iptables -D OUTPUT -o eth0 -p icmp -j DROP
then I couldnt ping also. Another thing I found is my firefox is not connecting to the internet as well, but before writing the script, I can connect to internet.
df -h [URL] I did the following command to find everything is in /usr or /var, then tracked it down to /usr/lib and /usr/share as the main offenders, but out of all the directories none are more than 1mb or so.
du -sh /* | sort -gr | head -n 5
I tried to uninstall firefox, which is what got me in this mess in the first place, the log claims it will remove ~240 mb but failes on a "E: Write error - write (28 No space left on device)" [URL] If I could juggle something onto an external hard drive so I can uninstall firefox I would be out of the wood. Failing that I believe a new install is in order.
I have an external hard disk drive and I would like it to be recognized with the same name (e.g. /dev/sbd) after each boot. Is there any way to make that?
I want to test LVM+Raid. When I was testing ZFS on Solaris, I was able to create regular files, and use those as disks for testing.I tried creating a regular file full of zeros w/ dd, then partitioning that. fdisk seemed to be able to create a partition on the regular file, but mkfs and parted couldn't work with it. Is there any way to create fake block devices for testing?
I built a Raid5 volume with 3 SATA II hard disk drives. Further I have a system disk conected through IDE. During the first setup the IDE disk becomes sda, the SATA II disk sd[bcd] respectively. Now, sometimes the device names change after reboot - why ever... E.g. one of the raid5 disk become sda and so I got an error message during the boot procedure regarding the raid set. Curious, when the system is up and I stop and restart the Raid5 volume it comes up and runs fine. Because I'm currently at work I can't post any more detailed config files at the moment.
I am trying to debug the issue of a desktop that has for the last two weeks started having kernel panics at boot time. This machine has been running flawlessly for the last 8 years, and has had three OS upgrades. I am using memtest to try to understand the issue. The following is part of the memtest output: Reading all physical volumes Buffer I/O error device hdc logical block 0 Buffer I/O error device hdc logical block 15
Illegal node for this track or incompatible media (asc=0x64 ascq=0x00) The failed "Read 10" packet command was /dev/hdc: read failed after 0 of 4096 at 0 Input/output error and similar set of mesaages After this udev checks correctly, and hardware, storage and audio are initialized However sometime in the middle of the boot process, a kernel panic occurs with message Kernel panic -- not symcing : Fatal exception in interrupt
* I am implementing mass storage device on a test board.
* It contains NAND flash.
* Using corresponding "udc driver" and "g_file_storage" I could make my test board enumerate as mass storage device on my Linux machine.
* my 16 MB pen drive (test board) is now ready for read/write.
But there are some Bad Blocks on the NAND.Hence copy is not complete. Although on Linux machine there is no error message. Now , what is there in a normal pen drive which manages the Bad Block or what am I missing so that such Bad Blocks are managed.
Here is the error I get on my test board :
mtdblock: erase of region [0x2c0000, 0x4000] on "Bon 2" failed end_request: I/O error, dev mtdblock2, sector 5664 Buffer I/O error on device mtdblock2, logical block 708
I want to keet some data on windows dir. I have tried the below command and giving the below error. [root@xyz0044 ~]# mount -t cifs //10.48.64.52/jata -o username=domainv.kumar3,password=xxxx /mnt/backup mount: block device //10.48.64.52/jata is write-protected, mounting read-only mount: cannot mount block device //10.48.64.52/jata read-only
I am running RHEL5.5 its a fresh install and we are testing Xen Virtualization. We are wanting to use our iSCSI SAN for the VMs. I have created the initiator iqn, and discovered the target address. We are connected to the target, but there is no new block device in /dev.
I have 2 hdds, with encrypted / and /home. Besides there are four other (encrypted ext4) partitions I use rarely. In Fedora 11 at boottime I gave the luks passphrase for / and home and the system booted as intended.
Whenever I needed those extra encrypted partitions I mounted them in Nautilus. Now, in Fedora 12 at boottime dracut tries to open all the encrypted partitions, / and /home are mounted fine, but opening all the other partitions gave the following messages in messages.log:
Quote:
dracut: luksOpen /dev/sdb6 luks-02a0e706-a26f-4019-a2a0-88a0366a994d kernel: Buffer I/O error on device dm-0, logical block 124 kernel: device-mapper: ioctl: unable to remove open device temporary-cryptsetup-304 kernel: Buffer I/O error on device dm-0, logical block 124 kernel: Buffer I/O error on device dm-0, logical block 124
[code]....
...and these messages are repeated with the other partiitions, and the boot time takes very, very long. How can I tell dracut to ignore those extra encrypted partitions at boottime?
i have a inspiron 1520 laptop which is starting to slow down some so i thought linux would help because all i do is internet use, so i download it from another computer and mount it to a usb flash drive like the site says, (netbook remix latest version) then i put it in my laptop and it loads all the way and i press try and after about 10 minutes of loading it lets me try. so that was ok really slow but i thought id install it to hard drive to see if it improved speed. so the next time i start my laptop i get Buffer i/o error on device loop0 logical block xxxxxx so i redo the usbflashdrive no errors switch usb ports and same thing, ive done the switch usb ports and redo the flash drive about 4 times im really getting mad at linux before i even have it installed.
I'm trying to upgrade my kernel. When i get to the step where i should build the img for grub (i guess the command below is doing that) I get this error: yaird error: bad device link in /sys/block/sda (fatal)Since I installed debian using a USB drive, HDD1 was /dev/sdb and HDD2 was /dev/sdc, the USB was /dev/sda. Is there a way to force mkinitrd.yaird to build the img for /dev/sdb?
I just downloaded an iso of the latest CentOS dist (5.3) and burned it to disk. I booted from the CD and received the following error: Memory for crash kernel (0x0 to 0x0) not within permissible range Illegal mode for this track or incompatible medium -- (asc=0x64, ascq-0x00) The failed "read 10" packet command was: Buffer I/O error on device hdd, logical block 176935
(This error message repeats for another 9 or 10 times then it says the following) Red Hat nash version 5.1.19.6 starting Setting up new root fs (Then there are some unmounts which are old /dev, /proc, /sys. At this point a series of steps begin).
Setting Clock Starting udev Loading default keymap (us) Setting hostname local host.localdomain Setting up logical volume management Checking file systems
These are just some of the steps that appear after the above error is displayed, all of the steps that load have an ok status. After those are completed I get to a text prompt - localhost login: At this point my keyboard does not seem to respond, pressing enter or any of the other keys seems to have no effect. I noticed that during the load process I could toggle the light for caps and num lock, but at the login screen it does'nt work. So at this point I'm not sure if I'm having a technical issue or if its just another case of an user error.